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

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())

Animal.Animal.check_mood()您试图调用一个没有实例的实例方法。您需要使用一个实例,例如a = Animal(); a.check_mood()。

我这样做并收到错误"typeerror:'module'对象不可调用"

@helpPlease,它需要是animal.animal()才能在模块中获取类。模块通常命名为小写。

我也试过了,但收到一个错误,说我缺少3个必需的位置参数

@帮帮忙,你自己写了这个代码。它需要三个参数。你把EDOCX1称为2,解释者回答"缺少3个需要的位置参数"。你认为什么是错误的?

我唯一的想法是在我的第二个程序中编写animal.animal(动物类型,名称,心情),但是当这样做时,我收到错误,动物类型没有定义。

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

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

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

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

mo = Animal.Animal.check_mood()

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

self.check_mood()

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

情绪应该是从3个选项中随机产生的,这就是为什么我在第一部分检查情绪的原因。

请帮助,如果你需要随机生成情绪,你可以在构造函数内完成。在Animal.__init__中调用Animal.check_mood,而不是将mood作为Animal.__init__的参数传递。

我不知道这会在程序中出现在哪里。对不起,我真的很困惑!