# 1. __str__方法: 必须return
class Goods:
def __str__(self):
return 'apple'
g = Goods()
print(g) #apple,省略写法,使用print(dir(g))可以查到对象里面有__str__方法。
print(g.__str__()) #apple
print(str(g)) #apple, str(g)相当于g.__str__()
print('%s'%g) #apple, str(g)相当于g.__str__()
# 2. __repr__方法:是__str__方法的备胎,当类中没有__str__方法的时候,依然可以调用__str__方法。必须return
class Goods:
def __repr__(self):
return 'apple'
g = Goods()
print(g) #apple
print(g.__str__()) #apple
print(str(g)) #apple
print('%s'%g) #apple
print(g.__repr__())#apple
print(repr(g)) #apple ,相当于g.__repr__()
print('%r'%g) #apple ,相当于g.__repr__()
# 3. __len__方法:
class Goods:
def __init__(self,name):
self.name = name
self.color = []
def __len__(self):
return '%s有%s种颜色'%(self.name,len(self.color))
apple = Goods('apple')
apple.color.append('red')
apple.color.append('green')
print(len(apple.color)) # 2
print(apple.__len__()) #apple有2种颜色
# 4. __del__方法:
class Goods:
def __del__(self):
print('删除商品')
apple = Goods()
del apple #删除对象,先调用对象里面的__del__方法,打印出‘删除商品’,接着删除apple对象。
print(apple) #name 'apple' is not defined
class A:
def __del__(self): #析构方法:在删除一个对象之前先关闭文件,进行收尾工作。
self.f.close()
a = A()
a.f = open() #a.f 拿到一个文件操作符然后存放在内存中,open()打开文件
del a #del先执行方法,后删除a
# 5. __call__方法:obj()就可以调用此方法。
class Goods:
def __call__(self):
print('调用方法')
apple = Goods()
apple() #调用方法