Python:类的继承与多态、类方法(@classmethod)

继承

继承是类与类之间的关系,其本质是方便类级别的代码复用

格式:class 类名(父类名)

                   代码块

class Teach(object):
    def __init__(self):
        self.buf = "古法煎饼"
        self.money = 1000

    def show(self):
        print("<%s>" % self.buf)


class School(object):
    def __init__(self):
        self.buf = "现代煎饼"

    def show(self):
        print("<%s>" % self.buf)


class Stu(Teach, School):
    def __init__(self):
        self.buf = "经典煎饼"

    def show(self):
        print("<%s>" % self.buf)

    def make_teach(self):
        Teach.__init__(self)
        Teach.show(self)

    def make_school(self):
        School.__init__(self)
        School.show(self)

# 对象调用成员函数的顺序,是遵循 __mro__ 这个属性
print(Stu.__mro__)
cat = Stu()
cat.show()
cat.make_teach()
cat.make_school()
print(cat.money)

执行结果:

 多态

python是一个弱类型的语言.

python多态遵循鸭子模型:

        鸭子模型: 想要一直鸟, 但是我身边没有鸟, 我只有一只鸭子,这个鸭子走路像鸟, 叫声也想鸟. 那么我就认为它是一只鸟.

# 多态: Python当中一切皆对象
class A(object):
    def call(self):
        print("动物的叫声")


class Cat(A):
    def call(self):
        print("喵喵喵")


class Dog(A):
    def call(self):
        print("汪汪汪")
        

def call(obj):
    obj.call()

cat = Cat()
dog = Dog()
call(cat)
call(dog)

执行结果:

类方法

Python中的类方法特别容易混淆,其听起来就像”类中的方法“一样。类方法是一种非常实用的技巧:类方法可以让类模板具有记忆力

在普通情况下,不使用类方法对类进行实例化,因此类本身是不具有记忆性的,只能当作静态模板被多次套用。如果我们想让类在每一次实例化之后,都能保留一些记忆,是否会对很多操作起到帮助?

需要注意的是,类方法处理的变量一定要是类变量

class A(object):
    id = 0

    def __init__(self):
        self.id = self.get_id()

    @classmethod
    def get_id(cls):   # cls 代表类本身
        cls.id += 1
        return cls.id

a1 = A()
print(a1.id)
a2 = A()
print(a2.id)
a3 = A()
print(a3.id)

 执行结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值