类方法
class Student():
count=0
def __init__(self,name):
self.name=name
Student.count+=1
def say(self):
print('你好!我叫:',self.name)
@classmethod #想定义类方法必须用@classmethod
def hanshu(cls): #类方法——第一个参数一定是类本身
print(cls.count) # 等于 print(Student.count)
zs=Student('张三')
zs.say()
Student.count()
静态方法
class Student():
count=0
def __init__(self,name):
self.name=name
Student.count+=1
def say(self):
print('你好!我叫:',self.name)
@classmethod
def hanshu(cls):
print(cls.count)
@staticmethod
def hanshu2():
print('我跟Student没关系')
zs=Student('张三')
zs.say()
Student.hanshu()
Student.hanshu2()
魔术方法
class Student():
count=0
def __init__(self,name):
self.name=name
Student.count+=1
def __del__(self):
Student.count-=1
print('删除了',self.name,'还剩下',Student.count)
zs=Student('张三')
ls=Student('李四')
ww=Student('王五')
del zs
del ls
del ww
class Student():
count=0
def __init__(self,name,age):
self.name=name
self.age=age
Student.count+=1
def __str__(self):
return '我叫%s,今年%d岁'%(self.name,self.age)
zs=Student('张三',20)
ls=Student('李四',30)
ww=Student('王五',40)
sentense=str(zs) # str 函数,启动了类中str的魔术方法
print(sentense)
class Student():
count=0
def __init__(self,name,age):
self.name=name
self.age=age
Student.count+=1
def __str__(self):
return '我叫%s,今年%d岁'%(self.name,self.age)
zs=Student('张三',20)
ls=Student('李四',30)
ww=Student('王五',40)
print(hasattr(Student,'count'))
print(hasattr(Student,'inst'))
Student.inst=100
print(hasattr(Student,'inst'))
class Car():
def __new__(cls, *args, **kwargs): # 生成对象的时候调用
print('我是new方法')
return object.__new__(cls) #生成一个新的对象
def __init__(self,name):
print('我是init方法') #初始化的时候调用
self.name=name
che=Car('奥迪')
class A():
def __init__(self,num):
self.num=num
def __eq__(self, other):
return self.num==other.num
a=A(8)
b=A(8)
print(a==b)
print(a is b)
class A():
def __init__(self,num):
self.num=num
def __eq__(self, other):
return self.num==other.num
def __add__(self, other):
return self.num+other.num
a=A(8)
b=A(8)
print(a==b)
print(a is b)
print(a+b)
class A():
def __new__(cls, *args, **kwargs):
if not hasattr(A,'hehe'):
cls.hehe=object.__new__(cls)
return cls.hehe
def __init__(self,name):
self.name=name
z=A('张三')
b=z
print(b==z)
print(b is z)
单例模式
class Car():
def __new__(cls, *args, **kwargs): #如果没有hehe属性
if not hasattr(Car,'hehe'):
cls.hehe=object.__new__(cls) #生成了一个对象给类属性hehe
return cls.hehe
def __init__(self,name):
self.name=name
a=Car('奔驰')
b=Car('宝马')
c=Car('奥迪')
print(a.name)
print(a==b)
print(b==c)
print(a is b)
print(b is c) #自始至终只生成了一个对象
多继承
class A():
def __inint__(self):
print('A')
class B():
def __init__(self):
print('B')
class C(A,B): #谁在前面就继承谁的,按照顺序继承
def __init__(self):
print('c')
super().__init__()
c=C()
class A():
def __init__(self):
print('A')
def hehe(self):
print('哈哈哈')
class B():
def __init__(self):
print('B')
class C(A,B): #谁在前面就继承谁的,按照顺序继承
def __init__(self):
print('c')
super().__init__()
super().hehe()
c=C()
class A():
def __init__(self):
print('A开始!')
print('A结束!')
class B():
def __init__(self):
print('B开始!')
super().__init__()
print('B结束!')
class C(A):
def __init__(self):
print('C结束!')
super().__init__()
print('C结束!')
class D(B,C):
def __init__(self):
print('D开始!')
super().__init__()
print('D结束!')
d=D()
print(D.mro())
观察者模式
class LaoBan():
def __init__(self):
self.guanChaZheMen=[]
self.ZhuangTai=""
def fuJia(self,observer):
self.guanChaZheMen.append(observer)
def tongZhi(self):
for d in self.guanChaZheMen:
d.update()
class Oberser():
def __init__(self,name,laoban):
self.name=name
self.laoban=laoban
def update(self):
print("%s,请注意不要玩了,%s"%(self.name,self.laoban.ZhuangTai))
class Caiwu():
def __init__(self,name,laoban):
self.name=name
self.laoban=laoban
def update(self):
print('%s %s今天晚上北京饭店集合'%(self.name,self.laoban.ZhuangTai))
tony=LaoBan()
cxx=Oberser("陈",tony)
zs=Oberser("张",tony)
ls=Oberser("李",tony)
ww=Caiwu('王',tony)
zl=Caiwu('赵',tony)
tony.fuJia(cxx)
tony.fuJia(zs)
tony.fuJia(ls)
tony.fuJia(ww)
tony.fuJia(zl)
tony.ZhuangTai="老板来了"
tony.tongZhi()
策略模式
class XianJin():
def shou_qian(self,money):
return money
class DaZhe():
def __init__(self,zheKou):
self.zheKou=zheKou
def shou_qian(self,money):
return money*self.zheKou
class ManJian():
def __init__(self,tiaojian,jian_e):
self.tiaojian=tiaojian
self.jian_e=jian_e
def shou_qian(self,money):
if money>=self.tiaojian:
return money-money//self.tiaojian*self.jian_e
else:
return money
class ZongGuan():
def __init__(self,celue):
self.celue=celue
def qiuQian(self,money):
return self.celue.shou_qian(money)
a={}
a[1]=ZongGuan(XianJin())
a[2]=ZongGuan(DaZhe(0.8))
a[3]=ZongGuan(ManJian(300,50))
celue=int(input('请输入策略'))
qian=float(input('请输入钱'))
if celue in a.keys():
money=a[celue].qiuQian(qian)
else:
money=a[1].qiuQian(qian)
print(money)
工厂模式
class Benz():
def __init__(self,name):
self.name=name
def pao(self):
print('%s在跑'%self.name)
class BMW():
def __init__(self,name):
self.name=name
def pao(self):
print('%s在跑'%self.name)
class GongChang():
@staticmethod
def ZhiCaoChe(name):
if name=='奔驰':
return Benz(name)
elif name=='宝马':
return BMW(name)
car1=GongChang.ZhiCaoChe('奔驰')
car2=GongChang.ZhiCaoChe('宝马')
car1.pao()
car2.pao()
菜鸟''Python''之————题海战术(11)
最新推荐文章于 2019-03-26 21:15:52 发布