继承
继承是类与类之间的关系,其本质是方便类级别的代码复用
格式: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)
执行结果: