一、面相过程编程
核心是‘过程’二字,过程指做事的步骤,即先做什么再做什么。基于该编程思想编写程序,就好比一条工厂流水线,一种机械式的思维方式。
-
优点:逻辑清晰,复杂的问题流程化,进而简单化
-
缺点:可扩展性差
二、面相对象编程
核心是‘对象’二字,对象值得是特征与技能的结合体。基于该编程思想编写程序,就好比在创造世界,一种上帝式的思维方式。
-
优点:可扩展性高
-
缺点:编写程序的复杂度远高于面向过程编程思想
三、程序中定义类和对象
-
定义类
定义类的时候,类体代码会在类定义阶段立即执行,并且产生一个类的名称空间。类本身即是一个名称空间
2. 定义对象
调用类即可产生对象,调用类的过程,又称为类的实例化。
四、类与对象中的属性
-
属性及查找顺序
-
类的名称空间中存放的是对象共有的属性
-
对象的名称空间中存放对象独有的属性
-
查找属性的顺序:对象>>>类>>>报错
-
init方法定制属性
-
类在实例化对象时会自动触发init方法
class Student: school = ‘Hogwarts’ def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender stu = Student('Harry', '11', 'male')
五、类和对象的绑定方法
-
类绑定方法
类中定义的函数就是类的函数属性,类可以当做一个普通函数使用
class Person: role = 'person' def walk(self): print("person is walking...") print(Person.role) Person.walk(1) print(Person.walk) 输出: person person is walking... <function Person.walk at 0x000001B7B2BBBD08>
-
对象绑定方法
class Person: role = 'person' def walk(self): print("person is walking...") p = Person() print(p.role) p.walk() 输出: person person is walking...
六、对象与对象之间的交互
class Dog: def __init__(self, name, breed, aggressivity, life_value): self.name = name self.breed = breed self.aggressivity = aggressivity self.life_value = life_value def bite(self, enermy): enermy.life_value -= self.aggressivity msg = f'{self.name}咬了{enermy.name}一口,造成{self.aggressivity}点伤害' print(msg) dog1 = Dog('旺财', '哈士奇', 100, 1000) dog2 = Dog('来福', '柴犬', 200, 600) dog1.bite(dog2) 输出: 旺财咬了来福一口,造成100点伤害