Python 如何从一个类调用另一个类中的函数?
我很难理解如何将函数或方法从一个类调用到另一个类。换句话说,如何从类Python 如何从一个类调用另一个类中的函数?,python,class,methods,Python,Class,Methods,我很难理解如何将函数或方法从一个类调用到另一个类。换句话说,如何从类Player中的类House调用mailbox函数,以便在键入mailbox时打印出字符串“有一个旧邮箱” class House(object): def __init__(self, mailbox, door, vindov): self.house = House() self.mailbox = mailbox self.door = door
Player
中的类House
调用mailbox
函数,以便在键入mailbox
时打印出字符串“有一个旧邮箱”
class House(object):
def __init__(self, mailbox, door, vindov):
self.house = House()
self.mailbox = mailbox
self.door = door
self.vindov = vindov
def door(self):
print "There is nothjing special about this door"
def vindov(self):
print "The vindov seems to be half open"
def mailbox(self):
print "there is an old mailbox"
class Player(House):
while True:
action = raw_input("> ")
if action == "mailbox":
由于
Player
继承自House
,您只需通过self.mailbox()
从House
播放器内部调用邮箱
方法即可。您还可以通过super()调用超类的方法。
正如Games Brainiac所指出的,您可以直接通过名称调用该方法,利用
Player
类是House
类的子类这一事实。为此,首先必须初始化Player类中的超类House:
class Player(House):
def __init__(self):
House.__init__(self)
有了它,您可以使用self.mailbox()
直接调用父类House
的mailbox()
方法。但是,这在此时不起作用,因为House
类中存在名称空间冲突。您为这些方法分配的名称与类的属性的名称相同,因此,如果您尝试在Player类中调用self.mailbox()
,解释器将理解您试图将字符串属性作为方法调用,并抛出以下错误:TypeError:“NoneType”对象不可调用。我建议您重命名以下方法:
def doorMethod(self):
print("There is nothjing special about this door")
def vindovMethod(self):
print("The vindov seems to be half open")
def mailboxMethod(self):
print("there is an old mailbox")
def mailboxQ(self):
action = input("> ")
if action == "mailbox":
self.mailbox()
现在您可以在Player类中调用mailboxMethod()。为此,我建议您将此调用打包到另一个函数中,而不是使用while
循环,如下所示:
def doorMethod(self):
print("There is nothjing special about this door")
def vindovMethod(self):
print("The vindov seems to be half open")
def mailboxMethod(self):
print("there is an old mailbox")
def mailboxQ(self):
action = input("> ")
if action == "mailbox":
self.mailbox()
现在,为了立即向用户提示问题,您应该在父类房屋初始化之后,调用播放器类的\uuu init\uu()方法中的方法
我还应该说,您可能不想尝试在内部初始化House类的实例,因为这将导致运行时错误:调用Python对象时超出了最大递归深度。调用尚未定义的对象;),因此,请从代码中删除以下行:
self.house = House()
这些更改应该使您的代码现在可以完全正常工作 为什么你需要把你的逻辑放在播放器里?您试图解决的问题是什么,如果您想从House
调用mailbox
方法,您需要做的就是super()。mailbox
将解决House
的mailbox
方法。谢谢您的帮助,我在PlayerBe中做逻辑,因为我不知道如何为游戏制作引擎,我可以用函数完美地完成这项工作,但我也想用类来完成这项工作,我正在尝试这样做:因为这是一个基于文本的游戏,当用户在邮箱中键入时,我希望程序打印出字符串“有一个旧邮箱”我必须在player类中创建一个函数才能调用类House中的mailbox函数吗?我不能在没有新函数的情况下调用函数吗?如果我不使用继承怎么办?不,你不能,你必须有某种方法来引用超类,这就是self
。另外,这不是你制作游戏引擎的方式,如果你想制作一个有功能的引擎,那也没有问题。不要在不需要的地方使用类。我总是得到错误自我没有定义?我该怎么办