我很难理解如何将一个函数或方法从一个类调用到另一个类。换句话说,如何从类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":
答案 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
这些更改应该使您的代码现在完全正常运行。