变量为空时给定的值

2024-06-01 09:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下Player基类:

from abc import ABC, abstractmethod

class Player(ABC):

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

Wizard

from Player import Player

class Wizard(Player):

    def __init__(self, name, player_type = "Wizard"):
        super().__init__(self,name)

Main

from Player import Player
from Wizard import Wizard


def main():

    gandalf = Wizard("Gandalf")
    print(gandalf.name)

    # Will print gandalf because the parameter assignment was shifted
    # because self was passed from the child to base class.
    print(gandalf.player_type)

if __name__ == "__main__":
    main()

我从this question知道,不应该将self从子类传递到基类。也就是说,假设你犯了这样的错误,行print(gandalf.name)打印<Wizard.Wizard object at 0x049F20B0>,因为name从未被赋值,但这个值到底意味着什么?你知道吗


Tags: namefromimportselfinitmaindeftype
1条回答
网友
1楼 · 发布于 2024-06-01 09:30:12

super()不返回类;它返回代理对象,因此super().__init__(self, name)的行为与foo.__init__(self, name)非常相似,其中fooWizard的“真实”实例。在这种情况下,调用Player.__init__的第一个参数self已经被赋值,因此您的显式self被赋值给下一个参数name,您的第二个参数name被赋值给第三个参数player_type。你知道吗

换句话说,Player是MRO中的下一个类,super().__init__(self, name)Player.__init__(self, self, name)相同。你知道吗

换句话说,super().__init__是一个绑定方法,因此已经提供了__init__函数的第一个参数self。你知道吗

相关问题 更多 >