Gor*_*ola 4 python inheritance python-3.x
当子类从超类继承时,子类是否必须具有超类具有的所有参数?例如:“车辆(颜色,车轮,尺寸)”是超类。我可以有一个继承 Vehicle 的子类,除了“size”属性/参数?
class LagStudent:
def __init__(self, name, dept, cgpa, is_a_scholar):
self.name = name
self.dept = dept
self.cgpa = cgpa
self.is_a_scholar = is_a_scholar
Run Code Online (Sandbox Code Playgroud)
class CovStudent(LagStudent):
def __init__(self, name, dept, cgpa, is_a_scholar, honours):
super().__init__(name, dept, cgpa, is_a_scholar)
self.honours = honours
class OxStudent(CovStudent):
def __init__(self, name, dept, cgpa, is_a_scholar):
super().__init__(name, dept, cgpa, is_a_scholar)
Run Code Online (Sandbox Code Playgroud)
student4 = OxStudent("Mark", "Mathematics", 4.62, True)
print(student4.is_a_scholar)
Run Code Online (Sandbox Code Playgroud)
TypeError: init () 缺少 1 个必需的位置参数:'honours'
我们定义 Vehicle 超类如下,而 Bicycle 子类如下
class Vehicle:
def __init__(self, colour, wheels, size):
self.colour = colour
self.wheels = wheels
self.size = size
class Cycle(Vehicle):
def __init__(self, colour, wheels, size):
super().__init__(colour, wheels, 'small')
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到周期的子类只需要在colors和wheels并将其传递到超类,并具有硬编码的size=small属性。子类构造函数调用超类的构造函数
要检查发生了什么,我们可以尝试如下:
veh = Cycle('Black', 2)
print(veh.colour)
print(veh.wheels)
print(veh.size)
#Black
#2
#small
Run Code Online (Sandbox Code Playgroud)
更新
根据 OP 不希望有 size 属性的评论,您可以为超类中的 size 属性分配一个默认值,例如size=None,您不需要在实例化子类时传递它。
class Vehicle:
def __init__(self, colour, wheels, size=None):
self.colour = colour
self.wheels = wheels
self.size = size
class Cycle(Vehicle):
def __init__(self, colour, wheels):
super().__init__(colour, wheels)
Run Code Online (Sandbox Code Playgroud)
然后您可以按如下方式调用它
veh = Cycle('Black', 2)
print(veh.colour)
print(veh.wheels)
print(veh.size)
#Black
#2
#None
Run Code Online (Sandbox Code Playgroud)
你可以看到sizeis的值None,这是我们选择的默认值,因为我们没有size明确传递,如果我们传递了它,我们就会得到size属性的值
| 归档时间: |
|
| 查看次数: |
2001 次 |
| 最近记录: |