Python-28 类和对象:继承

时间:2023-01-07 08:53:57

继承

语法:class DerivedClassName(BaseClassName):  在括号里加上父类的名字。

被继承的类叫基类、父类或超类。而继承者称为子类,子类可以继承父类的所有属性和方法。

>>> class Parent:
def hello(self):
print('正在调用父类....')


>>> class Child(Parent):
pass

>>> p = Parent()
>>> p.hello()
正在调用父类....
>>> c = Child()
>>> c.hello()
正在调用父类....
>>>

如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性。

>>> class Child(Parent):
def hello(self):
print('正在调用子类方法')


>>> c = Child()
>>> c.hello()
正在调用子类方法
>>> p = Parent()
>>> p.hello()
正在调用父类....
>>>


—调用未绑定的父类方法

import random as r

class Fish:
def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10)

def move(self):
self.x -=1
print('我的位置是:',self.x,self.y)

class Goldfish(Fish):
pass

class Carp(Fish):
pass

class Salmon(Fish):
pass

class Shark(Fish):
def __init__(self):
Fish.__init__(self)
self.hungry = True

def eat(self):
if self.hungry:
print('eating......')
self.hungry = False
else:
print('吃太多了....')

—使用super函数

直接使用super(),也不用self参数

import random as r

class Fish:
def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10)

def move(self):
self.x -=1
print('我的位置是:',self.x,self.y)

class Goldfish(Fish):
pass

class Carp(Fish):
pass

class Salmon(Fish):
pass

class Shark(Fish):
def __init__(self):
super().__init__()
self.hungry = True

def eat(self):
if self.hungry:
print('eating......')
self.hungry = False
else:
print('吃太多了....')




多重继承

class DerivedClassName(Base1, Base2, Base3):


>>> class Base1:
def fool1(self):
print('Base1......')


>>> class Base2:
def fool2(self):
print('Base2......')


>>> class C(Base1 ,Base2):
pass

>>> c = C()
>>> c.fool1()
Base1......
>>> c.fool2()
Base2......
>>>

多重继承,很容易导致代码混乱。