传递参数时如何正确使用super()。\uu init\uuuu?

2024-04-29 11:52:48 发布

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

我对python中的OOP还比较陌生,我正在编写一个小程序让我开始学习。问题是,当我创建一个对象时,无论我使用多少个位置参数,我似乎在参数数量上有一个错误。你知道吗

由于我对这个编程领域还比较陌生,我不太确定该尝试什么,但是我尝试过使用属性初始化阶段,但是,这会完全禁用程序。你知道吗

节目:

import random


class character:
    def __init__(self, name, skill, brains, home, strength, force):
        self.name = name
        self.skill = skill
        self.brains = brains
        self.home = home
        self.strength = strength
        self.force = force


class force_user(character):
    def __init__(self, name, skill, brains, home, strength, force, dark_force, light_force):
        super().__init__(self, name, skill, brains, home, strength, force)
        self.dark_force = dark_force
        self.light_force = light_force


class jedi(force_user):
    def __init__(self, name, skill, brains, home, strength, force, dark_force, light_force, master, rank):
        super().__init__(self, name, skill, brains, home, strength, force, dark_force, light_force)
        self.master = master
        self.rank = rank


a = jedi('Yoda', 46, 17, 'Dagobah', 34, 97, 2, 10, "N'Kata Del Gormo", 'Grand Master')

错误:

当我在对象“a”中有'Grand Master'“rank”参数时,我收到以下消息:

Traceback (most recent call last):
  File [file directory], line 37, in <module>
    a = jedi('Yoda', 46, 17, 'Dagobah', 34, 97, 2, 10, "N'Kata Del Gormo", 'Grand Master')
  File [file directory], line 32, in __init__
    super().__init__(self, name, skill, brains, home, strength, force, dark_force, light_force)
TypeError: __init__() takes 9 positional arguments but 10 were given

当我删除'Grand Master'参数时,我收到以下错误:

Traceback (most recent call last):
  File [File Directory, line 37, in <module>
    a = jedi('Yoda', 46, 17, 'Dagobah', 34, 97, 2, 10, "N'Kata Del Gormo")
TypeError: __init__() missing 1 required positional argument: 'rank'
我自己也不太明白这个问题,但是任何帮助或建议都太好了!你知道吗


Tags: nameselfmasterhome参数initstrengthskill
1条回答
网友
1楼 · 发布于 2024-04-29 11:52:48

你应该改变

super().__init__(self, name, skill, brains, home, strength, force, dark_force, light_force)

super().__init__(name, skill, brains, home, strength, force, dark_force, light_force)

使用非静态实例方法时,不需要传递self(第一个参数)。你知道吗

更清楚的是:如果在jedi中有这个方法

def printName(self):
    print(self.name)

你可以简单地用a.printName()来称呼它,而不是a.printName(a)。你知道吗

相关问题 更多 >