关于python:为什么我的程序中没有定义self

Why is self not defined in my program

程序的第一部分定义了类,第二部分通过如下不同的程序调用了类,但第二部分第5行的"typeerror:check_mood()缺少1个必需的位置参数:"self"随机进口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

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

1
2
3
4
5
6
7
8
9
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())


您试图在不首先实例化类的情况下运行类方法:

1
Animal.Animal.check_mood()

除非check_Mood()是类方法或静态方法,否则这将不起作用。

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

1
2
dog = Animal()
dog.check_mood()

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

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

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

使用静态方法的示例:

1
2
3
4
class Animal(object):
    @staticmethod
    def check_mood():
          #yourfunction

一类方法:

1
2
3
4
class Animal(object):
    @classmethod
    def check_mood(cls):
          #yourfunction

但是,既然你说的是动物的心情,我假设你先实例化一个动物,然后检查它的情绪。


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

1
mo = Animal.Animal.check_mood()

你要的是动物类本身的情绪。相反,从__init__这样称呼它:

1
self.check_mood()

然后,您将删除给出当前错误的行,只向Animal()传递两个参数,并修改def __init__行,使其不再期望情绪(因为动物本身随机产生情绪)。