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
。另外,这不是你制作游戏引擎的方式,如果你想制作一个有功能的引擎,那也没有问题。不要在不需要的地方使用类。我总是得到错误自我没有定义?我该怎么办