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 赋值

幅值只是形成两个变量,实际上还是指向同一个对象

Python__24--对象的特殊属性与特殊方法_深拷贝

3.2 浅拷贝

理解一:浅拷贝只拷贝主对象,两个主对象地址,源对象与拷贝对象会引用同一个子对象,既指向同一个实例对象。

理解二:浅拷贝指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。

Python__24--对象的特殊属性与特殊方法_深拷贝_02

3.3 深拷贝

理解一:深拷贝主对象和实例对象都会拷贝,新地址。

理解二:深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。

Python__24--对象的特殊属性与特殊方法_浅拷贝_03