5

【Python】继承与多态!

 1 year ago
source link: https://blog.51cto.com/u_15623229/5762840
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【Python】继承与多态!

精选 原创

继承让我们更加容易实现类的扩展。子类是父类的拓展。

class ParentClass1: #定义父类1
    pass
class ParentClass2: #定义父类2
    pass
class SubClass1(ParentClass1):
    # 单继承,基类是ParentClass1,派生类是SubClass
    pass
class SubClass2(ParentClass1,ParentClass2):
    # python支持多继承,用逗号分隔开多个继承的类
    pass

继承的规则

  1. 子类继承父类的成员变量和成员方法
  2. 子类不继承父类的构造方法,能够继承父类的析构方法
  3. 子类不能删除父类的成员,但可以重定义父类成员
  4. 子类可以增加自己的成员
class Person():

    def __init__(self, name, age, sex):
        self.name = "jasn"
        self.age = '18'
        self.sex = sex

    def talk(self):
        print("i want to speak something to yo!!")


class Chinese(Person):
    def __init__(self, name, age, sex, language):
        Person.__init__(self, name, age, sex)  # 用父类的name,age,sex 覆盖掉子类的属性
        self.age = age  # 覆盖掉了父类的age,取值为子类实例中传入age参数
        self.language = "chinese"

    def talk(self):
        print("我说的是普通话!!")
        Person.talk(self)


obj = Chinese("nancy",'18','male',"普通话")

print(obj.name)  # 对应场景A
print(obj.age)  # 对应场景B
print(obj.language)  # 对应场景C
obj.talk()  # 对应场景D

注意:

  1. 若父类中初始化了成员变量,子类调用父类构造方法未覆盖属性(self.name),则调用子类属性时取值为父类中初始化的成员变量
  2. 若父类中初始化了成员变量,若子类调用父类构造方法覆盖属性(self.age)则取值为子类实例中传入参数
  3. 若父类未初始化该成员变量,则无论子类中有无进行对父类构造方法进行属性的覆盖,均取子类实例中传入的参数
  4. 对于方法,如果子类有这个方法则直接调用,如果子类没有则去父类查找。父类没有则报错

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。

1、使用python,选择小汽车和客车为对象,使用类实现它们的属性和方
法(汽车的重量属性,驾驶的方法),并打印属性
2、对第一个问题改写:继承客车的属性和方法,改造为公交车,输入的
名字为:“东风路28路公交车”,并打印(也包括属性和驾驶的方法)
3、使用多态实现28路、906路、B32路公交车的驾驶方法并打印

示例代码:

class Car(object):#定义汽车类
    def __init__(self,name,weight):#定义汽车对象的属性
        self.name = name#定义名称属性
        self.weight = weight#定义重量属性

    def drive(self):#定义汽车对象的方法
        print(self.name+"正常驾驶")#输出驾驶方法
class Passenger(object):#定义客车类
    def __init__(self,name,weight):#定义客车对象的属性
        self.name = name#定义名称属性
        self.weight = weight#定义重量属性

    def drive(self):#定义客车对象的方法
        print(self.name + "正常驾驶")#输出驾驶方法

car1 = Car("汽车1号","10kg")#初始化一个汽车对象并传入参数
car1.drive()#调用汽车的驾驶方法
passenger1 = Passenger("客车1号","100kg")#初始化一个客车对象并传入参数
passenger1.drive()#调用客车的驾驶方法

class Bus(Passenger):#定义公交车类继承于客车
    def __init__(self,name,weight):#定义公交车对象的属性
        Passenger.__init__(self,name,weight)#调用父类对象构造函数覆盖子类的对象属性

bus1 = Bus("东风路28路公交车","150kg")#初始化一个公交车对象并传入参数
bus2 = Bus("东风路906路公交车","150kg")#初始化一个公交车对象并传入参数
bus3 = Bus("东风路B32路公交车","150kg")#初始化一个公交车对象并传入参数
bus1.drive()#调用公交车继承于客车的驾驶方法
bus2.drive()#调用公交车继承于客车的驾驶方法
bus3.drive()#调用公交车继承于客车的驾驶方法

  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK