一、面向对象
面向过程的程序设计:注重点是过程,过程就是解决问题的步骤,即干一件事情的先后顺序,这是一种机械式的思维方式
优点是:复杂的问题流程化,简单化
缺点是:设计好的一套流程是用来解决一个问题的,这一套流程是死的,不能局部更改流水线的方法,一旦更改,整个流水线程序都得更改,牵一发动全身!
应用场景:一旦设计好就不再改变的场景
面向对象的程序设计:注重点是对象,在大自然中一切皆对象,在程序中也是,我们要去创造对象。但是在程序中是先有类,然后再有对象。我们要去创造对象代替我们去干事儿。
优点是:解决了程序的扩展性,可以单独修改一个部分,修改之后可以反映到整个体系中。
缺点是:编程难度大于面向过程。无法预测问题的处理流程和结果。
应用场景:需要经常变化的软件,即要经常更新的软件,比如QQ,微信,各类游戏等等
二、类与对象
类就是类别,种类,是面向对象程序设计的重要概念。对象是特征和技能的结合体,类则是一系列对象相似的技能与技能的结合体
在现实生活中;先有对象,再有类
在程序中必须是先有类,再有对象
关于__init__方法(详细重点)
方式一:
为对象初始化自己独有的特征:
class People:
country = "China"
x = 1
def run(self):
print("——>",self)
实例化出三个空对象:
obj1 = People()
obj2 = People()
obj3 = People()
为对象定制自己独有的特征:
obj1.name = 'alan'
obj1.age = 18
obj1.sex = 'male'
obj2.name = 'alex'
obj2.age = 38
obj2.sex = 'male'
obj3.name = 'oven'
obj3.age = 28
obj3.sex = 'male'
print(obj1.__dict__)
print(obj2.__dict__)
print(obj3.__dict__)
print(People.__dict__)
方式二:
为对象初始化自己独有的特征:
class People:
country = ‘China'
x= 1
def run(self):
print("——>",self)
实例化出三个对象:
obj1 = People()
obj2 = People()
obj3 = People()
为对象定制自己独有的特性:
def chu_shi_hua(obj,x,y,z):
obj.name = x
obj.age = y
obj.sex = z
chu_shi_hua(obj,'alan',18,'male')
chu_shi_hua(obj,'alex',38,'male')
chu_shi_hua(obj,'oven',28,'male')
方式三:
为对象初始化自己独有的特征:
class People:
country = 'China'
x= 1
def chu_shi_hua(obj,x,y,z):
obj.name = x
obj.age = y
obj.sex = z
def run(self):
print('——',self)
obj1 = people()
People.chu_shi_hua(obj1,'alan',18,'male')
obj2 = people()
People.chu_shi_hua(obj2,'alex',38,'male')
obj3 = people()
People.chu_shi_hua(obj3,'oven',28,'male')
__init__方法 强调:
1.该方法内可以有任意的代码
2.一定不能有返回值
三、属性查找
类的两种属性:数据属性和函数属性
1.类的数据属性是所有对象共享的
2.类的函数属性时绑定给对象用的
四.绑定到对象的方法的特殊之处:
类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但必须遵循函数的参数规则,
有几个参数需要传几个参数
类中定义的函数(没有被任何装饰器装饰的),其实主要是给对象使用的,而且是绑定到对象的。只要绑定给了不同的对象,就意味着是不同的绑定方法
强调:绑定到对象的方法特殊之处就是,绑定给谁就有谁来调用,谁调用就将‘谁’本身当作第一个参数传给方法,也就是自动传值(方法和__init__是一样的道理)
注意:绑定到对象方法的这种自动传值的特征,决定了在类中定义的函数都默认写一个参数self,self可以是任意名字,但约定俗成的写self。(self英文翻译就是自己的意思)