首页 > 解决方案 > 我们如何调用一个类而不在调用时传递变量?

问题描述

这是一个MRE:

class Dog():
    def __init__(self, action, name):
        self.action = action
        self.name = name

    def name_dog(self):
        my_name = input("give me a name: ")
        return self.name(my_name)

    def act_like_dog(self):
        order = input("Tell me to do something: ")
        msg = self.name + " is " + order
        return self.action(msg)

    def main(self):
        self.name_dog()
        self.act_like_dog()

Dog.main()

在这种情况下调用 dog 类的主要目的是让用户为该类输入他们自己的值(名称、动作)。因此,我指定的类 ( Dogclass) 的变量是从函数中的函数调用 ( self.name_dogand self.act_like_dog) 获得的main(),这会提示用户提供他/她的输入。但是,当我尝试在没有 的情况下调用该main()函数时self,我收到一条错误消息,指出需要位置参数,而如果我调用该函数self(),则出现一个错误,表示self未定义。我该如何解决?

标签: python

解决方案


您似乎对一些元素感到困惑。

您需要创建该类的实际实例才能对其方法进行分类 - Dog(...). 除此之外,还有一个逻辑问题,您希望创建一个实例,name然后action将它们作为用户的输入。我认为您应该做的只是在__init__. 就像是:

class Dog():
    def __init__(self):
        self.name = self.name_dog()
        self.action = self.act_like_dog()
        
    def name_dog(self):
        my_name = input("give me a name: ")
        return my_name

    def act_like_dog(self):
        order = input("Tell me to do something: ")
        msg = self.name + " is " + order
        return msg

dog = Dog()

如果您希望能够更改nameaction以后,您可以使用您的main想法:

class Dog():
    def __init__(self):
        main()

    ...

    def main():
        self.name = self.name_dog()
        self.action = self.act_like_dog()

dog = Dog()

推荐阅读