我有:
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)我知道错误:
回溯(最近一次调用):文件"C:/Users/Daniel/PycharmProjects/ObjectOrientedSpecies/Species/Amphibian.py",第7行,在类两栖类(动物):TypeError: module.__init__()最多接受2个参数(3个给定)
我是Python新手,所以我不确定什么是好的OO实践。
发布于 2015-09-09 22:44:11
有两个问题我看得出来。首先,您应该在调用super的类的类名上调用super(这有点让人费解),所以这一行应该是super(Amphibian, self).__init__(dob, carnivore)而不是super(Animal, self).__init__(dob, carnivore)。Python将找到baseclass Animal本身。
但是,主要的问题是类Animal (几乎可以肯定)在一个名为"Animal.py“的文件中。Python在看到一个名为“Animal”的文件时自动生成一个名为Animal.py的模块(并对所有其他".py“名称执行类似的操作。因此,您的类Animal实际上在一个名为Animal的模块中。
因此,当您执行import Species.Animal as Animal时,您是在导入模块,而不是导入其中的类。因此,当您执行class Amphibian(Animal):时,您的两栖类是从类module继承的,而不是从类Animal继承的。您需要将导入更改为以下内容,以获得类Animal:from Species.Animal import Animal。
就您的风格而言,如果除了简单的获取和设置之外,在它们内部没有任何事情发生,那么我不认为有很多装饰的getter和setter有什么意义。只需去掉字号前面的下划线,并直接使用它们。您只需要使用getter和setter,如果必须发生其他事情来进行获取和设置。
https://stackoverflow.com/questions/32490060
复制相似问题