Python3进阶-2-单继承和多继承

avatar 2024年03月18日16:04:07 0 110 views
博主分享免费Java教学视频,B站账号:Java刘哥

继续紧接上篇,这篇文章讲下Python里的继承

完整代码:https://github.com/saysky/python_demo

一、单继承

DangYuan类继承于Person类

# Python 3.7.4
class Person:
    # 类属性定义,类似于java的static属性
    MAX_AGE = 150  # 最大年龄,150岁。公开属性,类似java的public权限,可以直接读取和修改
    __MAX_HEIGHT = 250  # 最大身高,250cm。私有属性以__开头,类似java的private权限,对外访问需要提供公开方法

    # 定义类方法,私有方法对外访问需要提供公开方法
    @classmethod  # 只有类方法需要加这个注解
    def get_MAX_HEIGHT(cls):
        return cls.__MAX_HEIGHT

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sayHello(self):
        print('Hello', self.name)


# 党员
class DangYuan(Person):

    def __init__(self, name, age, joinDate):
        super().__init__(name, age)
        self.joinDate = joinDate  # 入党日期

    def sayHello(self):
        print('我爱党,我的入党日期是:', self.joinDate)


p = DangYuan('小明', 18, '2024-1-1')
print(p.name, p.age, p.joinDate)  # 可以访问(读写)父类的属性
p.sayHello()  # 优先调用本类的方法,本类没有再去调用父类的

 

二、多层继承

父子孙三层继承示例

# Python 3.7.4
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sayHello(self):
        print('Hello', self.name)


# 党员,核心信息
class DangYuan(Person):

    def __init__(self, name, age, joinDate):
        super().__init__(name, age)
        self.joinDate = joinDate  # 入党日期

    def sayHello(self):
        print('我爱党,我的入党日期是:', self.joinDate)


# 党员信息详情,其他信息
class DangYuanDetails(DangYuan):

    def __init__(self, name, age, joinDate, introducer):
        super().__init__(name, age, joinDate)
        self.introducer = introducer  # 介绍人


p = DangYuanDetails('张三', 18, '2023-1-1', '李四')
print(p.name, p.age, p.joinDate, p.introducer)
p.sayHello()

 

三、一次继承多个和优先级问题

多继承,属性名相同会被后面的覆盖,需要看初始方法里的代码加载顺序。

通常本类属性优先级更高

# Python 3.7.4
class Goods:  # 商品类
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def sayHello(self):
        print('Hello', self.name, self.price)


class Author:  # 作者类
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sayHello(self):
        print('Hello', self.name, self.age)


class Book(Goods, Author):  # 书籍类,同时继承2个父类
    def __init__(self, goodsName, goodsPrice, authorName, authorAge, publisher):
        # 多个父类时
        Goods.__init__(self, goodsName, goodsPrice)  # 父类,商品的属性
        Author.__init__(self, authorName, authorAge)  # 父类,作者的属性
        self.publisher = publisher  # 书籍特有属性,出版社

    def sayHello(self):
        # 注意加载顺序,name因为存在同名,先被赋值为“一本好书”,后被覆盖为“张三”
        print('Hello', self.name, self.age, self.publisher, self.price)


b = Book('一本好书', 18.8, '张三', 18, '武当出版社')
print(b.age)
b.sayHello()

 

完整代码:https://github.com/saysky/python_demo

test5~test7

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0