1 特殊属性
1.1 dict
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name=name
self.age=age
x=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__方法,可使自定义对象具有“+”功能
class Student:
def __init__(self,name):
self.name=name
def __add__(self,other):
return self.name+other.name
stu1=Student('张三')
stu2=Student('李四')
s=stu1+stu2
print(s)
s=stu1.__add__(stu2)
print(s)
2.2 len
len()的作用是返回容器中元素的个数,要想使len()函数成功执行,必须要在类中定义__len__()。
class Student:
def __init__(self,name):
self.name=name
def __len__(self):
return len(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 深拷贝
理解一:深拷贝主对象和实例对象都会拷贝,新地址。
理解二:深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。