python学习之魔术方法day10/下午
其他
2019-03-11 09:11:09
阅读次数: 0
魔术方法
__del__方法
class A():
count=0
def __init__(self,name):
self.name=name
A.count+=1
def __del__(self):
print("删除",self.name,"还剩%d个对象"%(A.count))
A.count-=1
a=A("张三")
b=A("李四")
print(a.name)
print(b.name)
"""
张三
李四
删除 张三 还剩2个对象
删除 李四 还剩1个对象
"""
#在外部执行完del之后就不能调出a,b的属性了
del a
del b
print(a.name)
print(b.name)
__add__,__sub__,__mul__,__call__方法
class A():
def __init__(self,n):
self.n=n
def __add__(self, other):
return self.n+other.n
def __sub__(self,other):
return self.n-other.n
def __mul__(self, other):
return self.n*other.n
def __call__(self,num):
return self.n*num
a=A(8) #传入第一个参数
b=A(4) #传入第二个参数
c=a*b #32 第一个参数和第二个参数加减乘除
print(c)
__call__ 调用
class A():
def __init__(self,n):
self.n=n
def __call__(self, *args, **kwargs):
result=self.n
for a in args:
result*=a
for k,v in kwargs.items():
result +=v
return result
a=A(5)
c=a(1,2,3,age=4,shegao=5)
print(c)
__new__ 方法生成对象
class Car():
def __new__(cls, *args, **kwargs): #函数执行时先生成一个新的对象,然后再进行初始化
print("我在这儿")
return object.__new__(Car)
def __init__(self,name,cid):
print("你好")
self.name=name
self.cid =cid
c=Car("bmw","京A88888")
hasattr 判断类是否有某个属性
class Car():
obj=""
def __new__(cls, *args, **kwargs): #函数执行时先生成一个新的对象,然后再进行初始化
print("我在这儿")
return object.__new__(Car)
def __init__(self,name,cid):
print("你好")
self.name=name
self.cid =cid
c=Car("bmw","京A88888")
print(hasattr(c,"obj")) #True 判断对象c是否有obj属性
print(hasattr(c,"xx")) #False 判断对象c是否有xx属性
class Car():
def __new__(cls, *args, **kwargs):
if not hasattr(Car,"inst"):
Car.inst=object.__new__(Car)
return Car.inst
def __init__(self,name,cid):
print("你好")
self.name=name
self.cid=cid
a=Car("bmw","京A88888")
b=Car("宝马","京B88888")
print(a is b) #不仅比较内容也比较地址
print(a.name,a.cid) #宝马 京B88888
print(a.name,a.cid) #宝马 京B88888
转载自blog.csdn.net/qq_39112101/article/details/88066205