Python3中类的继承



因此Player类继承了Entity类的特性,但也具有唯一性其自身的特征在Player类中初始化。

class Entity(object):
def __init__(self, name, health, des):
self.name = name
self.health = health
self.des = des
class Player(Entity):
def __init__(self, mana):
self.mana = mana

这样做正确吗?

正如@juanpa.arrivilaga所指出的,您可能想要调用超类构造函数。按照__init__函数的工作方式,目前没有办法通过构造函数传递参数。

另一种方法是:

class Entity(object):
def __init__(self, name, health, des):
self.name = name
self.health = health
self.des = des
class Player(Entity):
def __init__(self, mana, *args):
super().__init__(*args)
self.mana = mana

这样,当创建Player时,您可以传递中的所有参数

mana = 100
name = "bob"
health = 1000
des = "potato"
player = Player(mana, name, health, des)

它确实有一种奇怪的模式,即在开头添加新的参数。

另一种选择是只使用关键字参数(*本身意味着任何非关键字参数都会被吞噬(

class Entity(object):
def __init__(self, *, name, health, des):
self.name = name
self.health = health
self.des = des
class Player(Entity):
def __init__(self, *, mana, **kwargs):
super().__init__(**kwargs)
self.mana = mana

然后玩家可以用进行初始化

mana = 100
name = "bob"
health = 1000
des = "potato"
player = Player(mana=mana, name=name, health=health, des=des)

最新更新