析构函数:
class A():
count=0
def __init__(self,name):
self.name=name
A.count+=1
def __del__(self): #析构函数
A.count-=0
print('删除',self.name,'还剩%d个对象'%A.count)
a=A('张三')
b=A('李四')
del a
del b
加减法函数:
class Num():
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 __call__(self, *args, **kwargs):
result=self.n
for a in args:
result*=a #1*5+2*5+3*5
for k,v in kwargs.items():
result+=v #4+5
return result
a=Num(5)
c=a(1,2,3,age=4,shengao=5)
print(c)
hasattr判断是否含有属性
class Car():
obj=''
def __new__(cls, *args, **kwargs):
print('我在这')
return object.__new__(Car) #建立一个car对象
def __init__(self,name,cid):
print('你好')
self.name=name
self.cid=cid
bmw=Car('宝马','京A66666')
print(hasattr(Car,'obj')) #hasattr有属性,判断类里是否含有引号内的属性
单例模式
class Car():
def __new__(cls, *args, **kwargs):
if not hasattr(Car,'inst'): #如果Car里面没有inst属性
Car.inst=object.__new__(Car) #建立一个Car对象,给inst属性
return Car.inst#返回inst
def __init__(self,name,cid):
print('你好')
self.name=name
self.cid=cid
a=Car('宝马','京A66666')
b=Car('奔驰','京B66666')
print(a is b) #a是Car.inst,b也是Car.inst,所以a是b
print(a.name,a.cid)
print(b.name,b.cid)