繁体   English   中英

如何从另一个类的一个类调用函数?

[英]How do I call a function from one class in another?

我很难理解如何从一个类调用另一个类的函数或方法。 换句话说,如何从Player类的House类中调用mailbox功能,以便在我输入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":

由于PlayerHouse继承而来的,因此您可以通过self.mailbox()Player内部的House调用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

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

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

有了这个,你可以调用mailbox()父类的方法House直接self.mailbox() 但是,这暂时不起作用,因为在House类内部存在名称空间冲突。 self.mailbox()这些方法分配与该类的属性相同的名称,因此,如果您尝试在Player类内部调用self.mailbox() ,则解释器将理解您正在尝试将字符串属性作为方法进行调用并引发以下错误: TypeError: 'NoneType' object is not callable 我建议您重命名这样的方法:

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")

现在,您可以在Player类内调用mailboxMethod()。 为此,建议不要使用while循环,而是将此调用打包在另一个函数中,如下所示:

def mailboxQ(self):
    action = input("> ")
    if action == "mailbox":
        self.mailbox()

现在,为了立即向用户提示问题,您应该在父class House初始化之后立即在Player class__init__()方法中调用该方法。

我还应该说您可能不想尝试在其内部初始化House class的实例,因为这将导致您遇到RuntimeError: maximum recursion depth exceeded while calling a Python object 您调用尚未定义的对象;),因此从代码中删除以下行:

self.house = House()

这些更改将使您的代码现在可以正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM