为啥我会收到错误数量的参数错误?
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。
【讨论】:
以上是关于为啥我会收到错误数量的参数错误?的主要内容,如果未能解决你的问题,请参考以下文章