面向对象之继承
继承也是面向对象编程的三大特征之一,当几个类对象中共有属性和方法中,则可以把属性和方法放到一个基类中,每个类对象特有的属性和方法还是放到本类中定义,这样只需要让每个类对象都继承这个基类就可以访问基类中的对象和方法了,继承基类的每个对象又称为派生类或子类,基类又称为父类。继承是代码复用的重要手段。
python中所有的类对象都继承一个统一的基类:object,这就是我们为什么要在每一个类对象的后面加一个object。
class Animal(object):
def eat(self):
print("吃饭")
def drink(self):
print("喝水")
class Dog(Animal):
def swim(self):
print("游泳")
class Bird(Animal):
def fly(self):
print("飞行")
dog = Dog()
dog.eat()
dog.drink()
dog.swim()
bird = Bird()
bird.eat()
bird.drink()
bird.fly()
输出:
吃饭
喝水
游泳
吃饭
喝水
飞行
单继承:子类只有一个直接父类时称为单继承,假设子类和父类分别为ChildClass和ParentClass,子类继承父类的格式为:
class ChildClass(ParentClass):
pass
多继承:子类有多个父类时称为多继承
class ChildClass(ParentClass1, ParentClass2,...,ParentClassn):
pass
子类会继承所以父类的属性和方法(包括所以直接的和间接的)
class ParentClassA(object):
ca = 19
def im(self):
print("im被调用了")
class ParentClassB(object):
__pia = 23
def __pcm(self):
print("pcm被调用了")
class ChildClassA(ParentClassA, ParentClassB):
@classmethod
def cm(cls):
print("cm被调用了")
class ParentClassC(object):
@staticmethod
def sm():
print("sm被调用了")
print(dir(ChildClassA))
输出:
[’_ParentClassB__pcm’, ‘_ParentClassB__pia’, ‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘ca’, ‘cm’, ‘im’]
在dir函数中传递模块名称可以检索函数和属性名。