多态:
意味着允许不同类的对象对同一消息做出不同的响应。
条件: 满足继承关系。需要方法重写。
构造函数:
def_init_(self,....):
self.name = name
pass
析构函数:
def_del_(self):
pass
每个函数都有一个属性值self
类的特殊方法:(合适的方法必须写在合适的类中)
_doc_:文档信息
_module_:模块信息
tag:自定义类属性
catch:自定义类方法
私有变量:
在python里面两个下划线开头的就是私有变量(无法访问也无法操作)
判断对象是否为类的实例:
isinstance(对象,类)
类的继承:
super(类,self).父类方法
class Animal (object):
tag = "动物"
def eat(self):
print("ALL the animal need to eat something for living!")
class Cat(Animal):
tag = "猫科动物"
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
super(Cat,self).eat()
print("also do the cats")
def catch(self):
print("catch mice")
if __name__ == '__main__':
cat = Cat("jj","8")
print(cat.name) cat.eat()
类的多重继承:
class C(A,B):
pass
类的高级特性:
@property:将类的方法当做属性来使用
@__slots__:1.为指定的类设置一个静态属性列表 2.为属性很少的类节约内存空间
例:__slots__ = (name,age) <—里面是一个tuple 意思是限制了一个类里面只能拥有两个属性
子类继承父类也会继承__slots__属性,但若想要子类可以添加新的属性,则可以在子类__slots__属性中将要添加的属性加入即可
类的静态方法和实例方法:
@staticmethod:表示静态方法,不用实例化就能实现。函数参数去掉self属性,self属性表示实例化对象本身
@classmethod:表示类方法,参数传递为cls表示类(和设计模式有关)
内存管理:
id():查看内存地址
== —> 比较数值 is —> 比较内存和数值
垃圾回收机制:
以引用计数为主,分代收集为辅。
如果一个对象的引用数为0,python虚拟机就会回收这个对象的内存
引用计数的缺陷是循环引用的问题,互相引用内存的得不到释放
引用计数:
每个对象都存有指向该对象的引用总数
查看某个对象的引用计数:sys.getrefcount()
可以使用del关键字删除某个引用