首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不正确的参数数会导致错误?

为什么不正确的参数数会导致错误?
EN

Stack Overflow用户
提问于 2015-09-09 22:21:49
回答 1查看 953关注 0票数 0

我有:

代码语言:javascript
复制
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)

我的第二堂课:

代码语言:javascript
复制
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

使用:

代码语言:javascript
复制
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实践。

EN

回答 1

Stack Overflow用户

发布于 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继承的。您需要将导入更改为以下内容,以获得类Animalfrom Species.Animal import Animal

就您的风格而言,如果除了简单的获取和设置之外,在它们内部没有任何事情发生,那么我不认为有很多装饰的getter和setter有什么意义。只需去掉字号前面的下划线,并直接使用它们。您只需要使用getter和setter,如果必须发生其他事情来进行获取和设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32490060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档