为啥我会收到错误数量的参数错误?

Posted

技术标签:

【中文标题】为啥我会收到错误数量的参数错误?【英文标题】:Why do I get an error for incorrect number of arguments?为什么我会收到错误数量的参数错误? 【发布时间】:2015-09-09 22:21:49 【问题描述】:

我有:

import datetime
class Animal(object):

    def __init__(self, dob, carnivore):
        self.__dob = dob
        self.__carnivore = carnivore

    @property
    def dob(self):
        return self.__dob

    @dob.setter
    def dob(self, dob):
        self.__dob = dob

    @property
    def carnivore(self):
        return self.__carnivore

    @carnivore.setter
    def carnivore(self, carnivore):
        self.__carnivore = carnivore

    def __str__(self):
        return "DOB: " + str(self.__dob) + "\nCarnivore: " + str(self.__carnivore)

我的第二堂课:

import Species.Animal as Animal
import datetime as date


class Amphibian(Animal):

    def __init__(self, dob=date.datetime.now(), carnivore=False, *characteristics):
        super(Animal, self).__init__(dob, carnivore)
        self.__characteristics = []
        for characteristic in characteristics:
            self.__characteristics.append(characteristic)

    @property
    def characteristics(self):
        return self.__characteristics

    @characteristics.setter
    def characteristics(self, characteristic):
        self.__characteristics.append(characteristic)

    def __str__(self):
        characteristics = ""
        for characteristic in self.__characteristics:
            characteristics += str(characteristic)
        return characteristics

使用:

amphibian = Amphibian(date.date(1979, 1, 12), True, "BackBone", "Cold Blooded")
print(amphibian)

我得到错误:

Traceback(最近一次调用最后一次):文件 "C:/Users/Daniel/PycharmProjects/ObjectOrientedSpecies/Species/Amphibian.py", 第 7 行,在 class Amphibian(Animal): TypeError: module.__init__() 最多接受 2 个参数(给定 3 个)

我是 Python 新手,所以我不确定什么是好的 OO 实践。

【问题讨论】:

【参考方案1】:

我可以看到两个问题。首先,您应该在您正在调用 super 的类的类名上调用 super(这有点拗口),因此该行应该是 super(Amphibian, self).__init__(dob, carnivore)not super(Animal, self).__init__(dob, carnivore) . Python 会自己找到基类Animal

然而主要问题是Animal 类(几乎可以肯定)在一个名为“Animal.py”的文件中。当Python看到一个名为“Animal.py”的文件时,它会自动创建一个名为Animal的模块(并对所有其他“.py”名称执行类似的操作。所以你的类Animal实际上在一个名为@987654329的模块中@。

因此,当您执行import Species.Animal as Animal 时,您导入的是 模块 而不是其中的类。因此,当您执行class Amphibian(Animal): 时,您的两栖动物是从module 类继承而不是从Animal 类继承。您需要将导入更改为以下内容以获取 Animal 类:from Species.Animal import Animal

就你的风格而言,如果除了简单的获取和设置之外没有任何事情发生,我真的不明白拥有大量装饰的 getter 和 setter 的意义。只需去掉属性名前面的下划线,直接使用即可。如果必须发生其他事情来进行获取和设置,您只需要使用 getter 和 setter。

【讨论】:

以上是关于为啥我会收到错误数量的参数错误?的主要内容,如果未能解决你的问题,请参考以下文章

不明白为啥我会收到“numpy.ndarray object not callable”错误?

收到“未定义无参数构造函数”错误,不知道为啥

为啥我会收到这种错误验证错误?

为啥我收到“不包含采用 0 个参数的构造函数”错误? C#

为啥我会收到错误的文件描述符错误?

为啥我会收到错误错误 C2664:'reverseString'