面向对象的三大特征:
1.对封装的理解
封装,类本身就是一个封装,封装了属性和方法。方法也是封装,对一些业务逻辑的封装。私有也是封装,将一些方法和属性私有化,对外提供可访问的接口。
2.对继承的理解
将共性的内容放在父类中,子类只需要关注自己特有的内容,共性的继承过来就行了,这样简化开发,符合逻辑习惯,利于扩展。
3.多态的理解
多态,一个对象在不同的情况下显示不同的形态。在python中因为是弱类型语言,对类型没有限定,所有python中不完全支持多态,但是多态的思想在python中也是能体现的。
面向过程:根据业务逻辑从上到下垒代码
函数式:将某功能代码封装到函数中,无需重复编写整个功能代码段,调用即可使用
面向对象:对函数进行封装,更快速地开发程序,减少重复代码的重写过程
1)类的名称:类名 class Cat():pass #命名时使用大驼峰
2)类的属性:一组数据
3)类的方法:允许对进行操作的方法
__init__方法,成功创建完类的实例对象后自动调用,可以初始化属性
__str__方法,当打印类的实例对象时,会打印出方法里return后面的返回值
__del__方法,1)当类的引用数为0时,调用__del__方法
2)当类的引用数不为0时,程序代码全部执行结束时,调用__del__方法
__slots__方法,限定实例对象动态绑定的属性和方法的命名,不限定类的,不限定初始的属性和方法名,只限定当前类,继承类不限定
类的私有属性、私有方法,不能在类之外调用,只能在类内部调用,而且不会被子类继承。
类的继承
创建一个类的时候可以继承一个或多个父类,继承之后,子类可以直接调用父类定义过的方法和属性,子类也可以重写父类的方法,用子类实例对象调用此方法时,代码执行的是子类内重写的类方法。
在子类内部调用父类的方法时,需要传递参数self,否则会报错。父类名.方法名(self)
若不想传递参数,可以用super().方法名() 去调用父类的方法
布尔函数,isinstance( )
class A:
def test():
print("---A")
class B(A):
def test():
print("---B")
if isinstance(B,A): # 判断B是不是A的子类
print("B是A的子类")
class C(A,B):
pass
obj = C()
obj.test()
#输出结果是:---A
__mro__可以查看调用方法的顺序
print(c.__mro__)