1 特殊属性
1.1 dict
classA: passclassB: passclassC(A,B): def__init__(self,name,age): self.name=nameself.age=agex=C('Jack',20) print(x.__dict__) #输出实例对象的属性字典print(C.__dict__) #输出类的方法和属性字典
1.2 class
print(x.__class__) #输出对象所属的类
1.3 bases
print(C.__bases__) #输出所有父类类型的元组
1.4 base
print(C.__base__) #只查看从左到右继承的第一个子类
1.5 mro
print(C.__mro__) #类的层次结构元素
1.6 subclasses
print(A.__subclasses__) #子类的列表
2 特殊方法
2.1 add
__add__方法是python的内置方法之一, 是一个一元函数。作用相当于求和运算
通过重写__add__方法,可使自定义对象具有“+”功能
classStudent: def__init__(self,name): self.name=namedef__add__(self,other): returnself.name+other.namestu1=Student('张三') stu2=Student('李四') s=stu1+stu2print(s) s=stu1.__add__(stu2) print(s)
2.2 len
len()的作用是返回容器中元素的个数,要想使len()函数成功执行,必须要在类中定义__len__()。
classStudent: def__init__(self,name): self.name=namedef__len__(self): returnlen(self.name) stu1=Student('张三') print(len(stu1)) print(lst.__len__())
2.3 init
在Python中定义类经常会用到__init__函数(方法),首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问。而__init__函数(方法)支持带参数类的初始化,也可为声明该类的属性(类中的变量)。__init__函数(方法)的第一个参数必须为self,后续参数为自己定义。
3 类
3.1 赋值
幅值只是形成两个变量,实际上还是指向同一个对象
网络异常,图片无法展示
|
3.2 浅拷贝
理解一:浅拷贝只拷贝主对象,两个主对象地址,源对象与拷贝对象会引用同一个子对象,既指向同一个实例对象。
理解二:浅拷贝指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。
网络异常,图片无法展示
|
3.3 深拷贝
理解一:深拷贝主对象和实例对象都会拷贝,新地址。
理解二:深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。
网络异常,图片无法展示
|