一、面向对象
1、面向过程
a、优点:极大的降低了写程序的复杂度,只需要顺着执行的步骤,堆叠代码即可
b、缺点:一套流水线或者流程就是来解决一个问题,代码就是牵一发而东莞全身
2、面向对象
a、优点:解决程序的扩展性,对某一个对象单独修改,会立刻反应到整个体系中
b、缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就有对象之间的交互解决问题。
3、 类:具有相同特征的一类事物(人、狗、老虎)
4、对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)
5、实例化:类——>对象的过程
6、 在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,
7、对象是则是这一类事物中具体的一个
class Person: #定义一个人类 role = 'person' #人的角色属性都是人 def walk(self): #人都可以走路,也就是有一个走路方法,也叫动态属性 print("person is walking...")
class 类名: 类属性 = None def __init__(self,对象属性): self.对象属性 = 对象属性 def 方法名(self): pass 实例 = 类名(10) 实例.方法名()
8、类的两种作用:属性引用和实例化
9、属性引用(类名.属性)
class Person: #定义一个人类 role = 'person' #人的角色属性都是人 def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") print(Person.role) #查看人的role属性 print(Person.walk) #引用人的走路方法,注意,这里不是在调用
10、例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征
class Person: #定义一个人类 role = 'person' #人的角色属性都是人 def __init__(self,name): self.name = name # 每一个角色都有自己的昵称; def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") print(Person.role) #查看人的role属性 print(Person.walk) #引用人的走路方法,注意,这里不是在调用
11、
类名 类名.类属性 类名.方法名 实例 = 类名(参数,参数) #实例就是对象 实例 实例.方法名() 实例.对象属性 实例增加属性 实例.新的属性名 = 1000 print(实例.新的属性名)
12、关于self
self:在实例化时自动将对象/实例本身传给__init__的第一个参数,你也可以给他起个别的名字.
对象/实例只有一种作用:属性引用
class 类名: def __init__(self,参数1,参数2): self.对象的属性1 = 参数1 self.对象的属性2 = 参数2 def 方法名(self):pass def 方法名2(self):pass 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西 #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法 #括号里传参数,参数不需要传self,其他与init中的形参一一对应 #结果返回一个对象 对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可 对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
dir(类) #返回类中的所有名字列表 isinstance(对象,类) #判断对象是否为类的实例 print(Person.__dict__) # 返回一个字典 key是属性名,value是属性值 print(Person.__module__) #person类所在的模块 print(Person.__name__,type(Person.__name__)) #字符串数据类型的类名
13、类命名空间与对象、实例的命名空间
a、常见一个类就会创建一个类的名称空间,用来储存类中定义的所有名字,这些名字成为类的属性
b、而类有两种属性:静态属性和动态属性
- 静态属性就是直接在类中定义的变量
- 动态属性就是定义在类中的方法
创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性
面相对象的组合用法:
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组
列子:
from math import pi class Circular: def __init__(self,radius): self.radius=radius def area(self): return self.radius **2 * pi def perimeter(self): return 2 * self.radius * pi circu=Circular(10) print(circu.area()) print(circu.perimeter())