python基础知识(十六)

8 篇文章 0 订阅
4 篇文章 0 订阅

类方法

class Student():
    count = 0
    def __init__(self,name):
        self.name=name
        Student.count+=1
    def say(self):
        print("你好,我叫",self.name,sep="")
    @classmethod             #想定义类方法必须用@classmethod
    def hanshu(cls):         #类方法、第一个参数一定是类本身
        print(cls.count)
        print(Student.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

结果为:
在这里插入图片描述
str函数魔术

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("张三",19)
ls = Student("李四",20)
ww = Student("王五",21)
sentence=str(zs)                       #str函数,启动了类中str的魔术方法
print(sentence)
print(hasattr(Student,"count"))
print(not hasattr(Student,"inst"))     #查找类中是否含有此属性(hasattr含有属性)
Student.inst = 9999
print(hasattr(Student,"inst"))

结果为:
在这里插入图片描述
eq-----等于

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
x = A(5)
y = A(5)
print(x==y)
print(x is y)
print(x+y)

结果为:True False 10
单例模式

class Car():
    def __new__(cls, *args, **kwargs):          #单例模式
        if not hasattr(Car,"hehe"):            #如果  类没有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==c)
print(a is c)

结果为:红旗 True True

广度优先级

class A():
    def __init__(self):
        print("A开始")
        print("A结束")
class B(A):
    def __init__(self):
        print("B开始")
        super().__init__()
        print("B结束")
class E(A):
    def __init__(self):
        print("E开始")
        super().__init__()
        print("E结束")
class C(A):
    def __init__(self):
        print("C开始")
        super().__init__()
        print("C结束")
class D(B,C,E):                          #B,C处于同一层次,先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()
zs = Oberser("张三",tony)
ls = Oberser("李四",tony)
ww = Oberser("王五",tony)
xd = Caiwu("熊大",tony)
xe = Caiwu("熊二",tony)
tony.fuJia(zs)
tony.fuJia(ls)
tony.fuJia(ww)
tony.fuJia(xd)
tony.fuJia(xe)
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):
        return money - money // self.tiaojian * self.jian_e
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 ZhiZaoChe(name):
        if name=="奔驰":
            return Benz(name)
        elif name=="宝马":
            return BMW(name)
car1=GongChang.ZhiZaoChe("奔驰")
car2=GongChang.ZhiZaoChe("宝马")
car1.pao()
car2.pao()

结果为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值