程序的第一部分定义了类,第二部分通过不同的程序调用了类,但是我一直得到一个" 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())
答案 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本身会生成它)随机地)。