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() |
或者使用静态方法或类方法。
静态方法是一个不接收隐式第一个参数(如实例方法中的
类方法是将类本身而不是实例作为其第一个参数接收的函数。这通常只在希望从非标准参数创建类实例时有用。在这种情况下,这不太可能有用,因为您实际上不需要方法中的类。
使用静态方法的示例:
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() |
你要的是动物类本身的情绪。相反,从
1 | self.check_mood() |
然后,您将删除给出当前错误的行,只向