为什么我的程序中没有定义自我

时间:2015-04-20 00:41:58

标签: python class python-3.x attributes typeerror

程序的第一部分定义了类,第二部分通过不同的程序调用了类,但是我一直得到一个" TypeError:check_mood()缺少1个必需的位置参数:&#39 ;自' "对于第二部分中的第5行 随机导入

class Animal:
    #initialize attributes
    def __init__(self,animal_type, name, mood):
        self.__animal_type = animal_type
        self.__name = name
        self.__mood = mood

    # set methods
    def set_animal_type(self, animal_type):
        self.__animal_type = animal_type

    def set_name(self, name):
        self.__name = name

    def set_mood(self, mood):
        self.__mood = mood

    #check mood
    def check_mood(self):
        integer = random.randint(1,3)
        if integer == 1:
            self.__mood = "happy"
        elif integer == 2:
            self.__mood = "hungry"
        elif integer == 3:
            self.__mood = "sleepy"


    #return methods
    def get_animal_type(self):
        return self.__animal_type

    def get_name(self):
        return self.__name

    def get_mood(self):
        return self.__mood

我做了一个简单的测试程序来运行它:

import Animal

an = input("enter aninal:")
na = input("enter name:")
mo = Animal.Animal.check_mood()

animals = Animal.Animal(an,na,mo)

print(animals.get_animal_type(), animals.get_name(), animals.get_mood())

2 个答案:

答案 0 :(得分:2)

您首先尝试运行类方法而不首先实例化您的类:

Animal.Animal.check_mood()

这不起作用,除非check_mood()是类方法或静态方法。

您需要实例化您的类并在实例上运行您的方法

dog = Animal()
dog.check_mood()

或使用静态方法或类方法。

静态方法是一个不接收隐式第一个参数的函数(如实例方法中的self),因此只是一个常规函数。

类方法是一个函数,它接收类本身而不是实例作为其第一个参数。这通常仅在您想要使用非标准参数创建类的实例时才有用。在这种情况下,这可能不太有用,因为您实际上并不需要该方法中的类。

如何使用静态方法的示例:

class Animal(object):
    @staticmethod
    def check_mood():
          #yourfunction

和一个类方法:

class Animal(object):
    @classmethod
    def check_mood(cls):
          #yourfunction

然而,既然你正在谈论动物的情绪,我假设你想首先实例化动物,然后检查它的情绪。

答案 1 :(得分:1)

check_mood()是一个实例方法 - 它需要一个特定的动物,它会检查它的情绪。但是这里

mo = Animal.Animal.check_mood()

你要求动物类本身的情绪。相反,请从__init__这样调用它:

self.check_mood()

然后你会删除给你当前错误的行,只将两个参数传递给Animal(),然后修改def __init__行以便它不再需要心情(因为Animal本身会生成它)随机地)。