菜鸟''Python''之————题海战术(11)

类方法

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值