从 Python 2.7 中的另一个类方法调用一个类方法 [英] Calling a class method from another class method in Python 2.7

查看:60
本文介绍了从 Python 2.7 中的另一个类方法调用一个类方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很困惑为什么此代码不起作用.对于 room_instance = self.startRoom() 我得到错误:

I'm confused why this code won't work. For room_instance = self.startRoom() I get the error:

'str' object is not callable.  

我的代码:

class Corridor:
    def enter(self):
        print "Yureka. First Room!"

class Engine(object):
    def __init__(self, startRoom):
        self.startRoom = startRoom   #sets the startRoom to 'Corridor' for the eng instance
    def room_change(self):
        room_instance = self.startRoom()
        room_instance.enter()

eng = Engine('Corridor')
eng.room_change()

推荐答案

当您使用 eng = Engine('Corridor') 时,您将 'Corridor' 作为字符串传递.要访问类 Corridor,您应该使用 globals()['Corridor']

when you use eng = Engine('Corridor') you pass 'Corridor' as a string. To access class Corridor you should use globals()['Corridor']

class Engine(object):
    def __init__(self, startRoom):
        self.startRoom = globals()[startRoom]   #sets the startRoom to 'Corridor' for the eng instance

    def room_change(self):
        room_instance = self.startRoom()
        room_instance.enter()

但实际上它是一个相当脆弱的结构,因为 Corridor 可能定义在其他模块等中.所以我建议如下:

But actually it's a rather fragile construction because Corridor may be defined in other module etc. So I would propose the following:

class Corridor:
    def enter(self):
        print "Yureka. First Room!"

class Engine(object):
    def __init__(self, startRoom):
        self.startRoom = startRoom   #sets the startRoom to 'Corridor' for the eng instance
    def room_change(self):
        room_instance = self.startRoom()
        room_instance.enter()

eng = Engine(Corridor) # Here you refer to _class_ Corridor and may refer to any class in any module
eng.room_change()

这篇关于从 Python 2.7 中的另一个类方法调用一个类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆