python - 我们如何调用一个类而不在调用时传递变量?
问题描述
这是一个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 类的主要目的是让用户为该类输入他们自己的值(名称、动作)。因此,我指定的类 ( Dog
class) 的变量是从函数中的函数调用 ( self.name_dog
and self.act_like_dog
) 获得的main()
,这会提示用户提供他/她的输入。但是,当我尝试在没有 的情况下调用该main()
函数时self
,我收到一条错误消息,指出需要位置参数,而如果我调用该函数self()
,则出现一个错误,表示self
未定义。我该如何解决?
解决方案
您似乎对一些元素感到困惑。
您需要创建该类的实际实例才能对其方法进行分类 - 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()
如果您希望能够更改name
和action
以后,您可以使用您的main
想法:
class Dog():
def __init__(self):
main()
...
def main():
self.name = self.name_dog()
self.action = self.act_like_dog()
dog = Dog()
推荐阅读
- r - R 中 plot() 函数的大小参数
- redis - M1 MacBookpro 安装 brew
- javascript - 如何在 A-Frame 中为特定实体隐藏默认手形光标或如何应用 css 光标属性“不允许”
- arrays - 在循环中转换我的程序,但它在数组中
- java - 如何通过“Mod Coder Pack”(MCP)在 Minecraft 中正确使用 Singleton?
- redis - 如果在 HA 场景中不需要持久性,则将 Redis 作为部署或 statefulset
- python - 如果组中存在特定值,则 pandas groupby 数据框列并创建新列
- nginx - 通过 Ingress 访问 K8s 服务
- c# - System.UnauthorizedAccessException: '访问被拒绝。尝试在计算机管理中添加用户时
- python - Tkinter 在子进程之后而不是之前切换帧