如何在另一个类中调用函数?

时间:2015-10-11 22:34:43

标签: python class methods

我很难理解如何将一个函数或方法从一个类调用到另一个类。换句话说,如何从类mailbox中的类House调用Player函数,这样当我输入mailbox字符串"There is an old 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":

2 个答案:

答案 0 :(得分:0)

由于Player继承自House,您只需通过mailbox从玩家内部House调用self.mailbox()方法即可。您也可以通过super().<method name in super class>调用超类的方法。

>>> class A(object):
...     def __init__(self, t):
...         self.t = t
...
...     def mailbox(self):
...         print("This is an old mailbox")
>>> class B(A):
...     def new_mailbox(self):
...         self.mailbox()
...
...
...
>>> b = B("hello")
>>> b.new_mailbox()
This is an old mailbox

答案 1 :(得分:0)

正如Games Brainiac指出的那样,你可以调用直接通过名称调用它的方法,利用Player类是House类的子类这一事实。为此,首先必须在Player类中初始化超类House:

class Player(House):
    def __init__(self):
        House.__init__(self)

使用此功能,您可以直接使用mailbox()调用父类House的{​​{1}}方法。但是,此时此操作无效,因为self.mailbox()类中存在命名空间冲突。您正在为方法分配与类的属性相同的名称,因此如果您尝试在Player类中调用House,解释器将理解您正在尝试调用字符串属性作为方法并抛出以下错误:self.mailbox()。我建议你重命名这样的方法:

TypeError: 'NoneType' object is not callable

现在您可以调用Player类中的mailboxMethod()。为此,我建议您将此调用打包到另一个函数中,而不是使用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") 循环,如下所示:

while

现在为了向用户提示问题,您应该在父def mailboxQ(self): action = input("> ") if action == "mailbox": self.mailbox() 之家的初始化之后立即调用播放器__init__()的{​​{1}}方法中的方法。

我还应该说你可能不想尝试在其内部初始化House class的一个实例,因为这会引导你进入class。您调用尚未定义的对象;),因此从代码中删除以下行:

class

这些更改应该使您的代码现在完全正常运行。