继续紧接上篇,这篇文章讲下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
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏