关于面向对象
1.面向对象__init__方法;
init方法新建对象时自动加载调用为默认方法
2.方法的重写和继承父类
1.当与父类方法不一样时,直接在子类中与重写方法,方法名一样即可。这样只会调用子类的方法,不会再去用父类中同名的方法。(完全不同)
2.对父类方法进行扩展,用super()进行调用扩展,先同样对方法进行同名扩展后增加不一样的代码部分,而后相同部分可以进行super().方法 进行对父类同样代码部分的调用(部分相同,py3中才有)
在py2.0中没有super()方法只能使用父类名方法调用如 Dog.bark(self)一定要传入self
且用这种扩展方法时,不能调用自己的方法会出现递归死循环
3.私有方法和属性
私有属性和方法,在子类中不能直接访问父类的私有属性和方法,私有属性方法前带有两个下划线,
self.__num2 私有属性
def __test():
print("私有方法“)
子类对象中自己的内部不能直接访问,私有属性和方法,想要访问父类创建的私有属性和方法,必须改变改变原来父类,将父类中的公有方法中进行调用父类自己的私有属性和私有方法,然后子类调用这个公有方法就可以了,这样做必须是父类中私有属性方法,被公有方法调用。
4.多继承
一个类可以同时继承多个父类,减少代码的冗余,具有所有父类的方法。
代码格式
class A():
pass
class B():
pass
class C(A , B):
pass
父类之间不要存在重名方法和属性
如果存在同名方法,会按照MRO搜索 先搜自己的方法,然后按照继承顺序搜索,没有搜到程序报错
5.多态
6.类属性
1.记录实例的类的特征工具,不会记录每一个对象实例的特征
- 类方法
8.静态方法
既不需要访问类属性cls,也不需要访问实例属性self, 就可以定义为静态方法
方法综合案例:
1.实例方法-- 方法内部需要访问实例属性
2.类方法–方法内部只访问类属性
3 静态方法–方法内部,不需要访问实例属性和类属性
单例的代码演示:
单例为同一类只存在一个真实的实例,建立不同的对象时其实他们内存地址都为一样