callable()–对象() 能不能运行就说callable的事
class A:
def call(self,*args,**kwargs):
print(--------)
obj=A()
print(callable(obj))
输出:True
obj() #callable为True,可以加括号
#__call__:对象加()调用的是这个类中的__call__方法(__call__方法下面对应的逻辑)
#__len__:len(对象) 需要实现这个类中的__len__方法
#想使len,类中必含__len__
class Cls:
def __init__(self,name,student):
self.name=name
self.student=[]
def __len__(self):
return len(self.students)
py22=Cls("py22")
py22.student.append('xi')
py22.student.append('ha')
print(len(py22))
输出:2
#__new__
实例化时,先创建一块对象的空间,有一个指针能指向类—>new #构造方法
先调用__new__,再调用__init__
设计模式----单例模式
#一个类,从头到尾,只创建一次self空间
输出:红毛衣
白衬衫 #只实例化一次,只有一块内存空间,后来加东西,前面的就扔掉
白衬衫
帮我们打印对象的时候得到更直观的结果,而不是一串内存地址
__str__(精准的应用如下情况):
(1)在打印一个对象的时候,调用__str__方法
(2)在%s拼接一个对象的时候,调用__str__方法
(3)在str一个对象的时候,调用__str__方法
__repr__:如果找不到__str__,就调用__repr__
__repr__不仅是__str__的替代品,还有自己的功能,和%r和repr有合作关系
用%r进行字符串拼接,或是用repr(对象)时总是调用这个对象的__repr__方法