学习python笔记之__call__/__len__/__new__/__str__/__repr__

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空间
单例模式mo实例
输出:红毛衣
白衬衫 #只实例化一次,只有一块内存空间,后来加东西,前面的就扔掉
白衬衫

帮我们打印对象的时候得到更直观的结果,而不是一串内存地址
__str__(精准的应用如下情况):
        (1)在打印一个对象的时候,调用__str__方法
       (2)在%s拼接一个对象的时候,调用__str__方法
       (3)在str一个对象的时候,调用__str__方法
__repr__:如果找不到__str__,就调用__repr__
         __repr__不仅是__str__的替代品,还有自己的功能,和%r和repr有合作关系
         用%r进行字符串拼接,或是用repr(对象)时总是调用这个对象的__repr__方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值