callable(对象)
判断对象()是否可以运行
class user:
def __init__(self,name):
self.user = name
def login(self):
pass
a = user('alex')
b = getattr(a,'login')
print(callable(a)) #False
print(callable(b)) #True
使用对象名加()执行的是__call__函数中的内容
class user:
def __init__(self,name):
self.user = name
def login(self):
pass
def __call__(self, *args, **kwargs):
print("调用了call方法")
a = user('alex')
a() #调用了call方法
使用len(对象)执行__len__方法中的内容
class Cls:
def __init__(self,name):
self.name = name
self.students = []
def __len__(self):
return len(self.students)
py22 = Cls('py22')
py22.students.append('1')
py22.students.append('2')
py22.students.append(3)
print(len(py22)) #3
实例化的时侯先执行__new__方法创建一块空间然后调用__init__函数,创建对象需要的空间
class User:
def __new__(cls, *args, **kwargs):
print("执行了new函数")
def __init__(self):
print("执行了init函数")
User() #执行new函数
在打印一个对象时,调用__str__方法,如果没有该方法,则继续寻找__repr__方法
__repr__还有自己的独立功能
使用%r进行字符串替换时,使用__repr__方法,不使用__str__方法
class Course:
def __init__(self,name,price,period):
self.name = name
self.price = price
self.period = period
def get_name(self):
return self.name
def __str__(self):
return ",".join([self.name,str(self.price),self.period])
python = Course('python',21800,'7 month')
linux = Course('linux',19800,'3 month')
mysql = Course('mysql',12800,'7 month')
go = Course('go',13909,'4 month')
list = [python,linux,mysql,go]
for i in list:
print(i) #mysql,12800,7 month(循环,全部输出)
帮助我们在打印或展示对象时更直观的显示对象的内容