构造和析构
-
__init__(self[, ...]) #类在实例化之后会调用的方法,必须返回None。
-
__new__(cls[, ...]) #对象实例化是调用的第一个方法,除cls参数传给__init__(self[, ...]),返回实例对象,一般不重写,继承不可变类型而且需要修改的时。
class CapStr(str): def __new__(cls, string): string = string.upper() return str.__new__(cls, string) 复制代码
-
__del__(self) #所有对对象的引用都被del,启用垃圾回收机制,自动调用__del__(self)。
算数运算符
class Try_int(int):
def __add__(self, other):
return self + other
复制代码
#无限递归
class Try_int(int):
def __add__(self, other):
return int(self) + int(other)
复制代码
#修改后
- 工厂函数(int()、float()、str()、list()等),就是一个类对象。调用他们时,事实上就是创建一个相对应的实例对象。
计时器
#不用自己写的,有很多的问题
- 静态方法 # 在普通方法上加上@staticmethod ,优点是不会绑定到对象上,节省开销。静态方法不需要self参数。
属性访问
class C:
def __init__(self, size=10):
self.size = size
def getSize(self):
return self.size
def setSize(self, value):
self.size = value
def delSize(self):
del self.size
x = property(getSize, setSize, delSize)
c = C()
c.x = 2
c.x
2
c.size
2
del c.x
c.size
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
c.size
AttributeError: 'C' object has no attribute 'size'
复制代码
__getattr__(self, name) #定义当用户试图获取一个不存在的属性时的行为,
__getattribute__(self, name) #定义当该类的属性被访问时的行为
__setattr__(self, name) #定义当一个属性被设置的行为
__delattr__(self, name) #定义当一个属性被删除的行为
描述符(Property的原理)
- 描述符就是将某种特殊类型的类的实例指派给另一个类的属性 __get__(self, instance, owner) #用于访问属性,返回属性的值
__set__(self, instance, owner) #将在属性分配操作中调用,不返回任何内容 __delete__(self, instance, owner) #控制删除操作,不返回任何的值
定制序列
- 协议 类似其他编程语言的接口,规定要定义什么方法。python的不那么正式,像是一种指南。
- 容器类型的协议 #不可变,定义__len__() 和 __getitem__(), 可变,除了__len__()和__getitem__()方法,还需要定义__setitem__()和__delitem__()。
迭代器
-
__iter__()
-
__next__()
string = 'ABCDEF'
it = iter(string)
while True:
try:
each = next(it)
except StopIteration:
break
print(each)
A
B
C
D
E
F
复制代码
#迭代,用while实现for。
#简单过了一下,还有点懵