说我想这样做,当我写作时:
class Bacon:
def __init__(self):
self.bacon = True
def eatBacon(self):
self.bacon = False
print self.bacon
bacon = Bacon()
x = bacon
y = raw_input("eatBacon")
然后说我想做这样的事情:
x.y()
这可能吗?
对不起,如果它看起来像一个愚蠢的问题,我只是开始学习面向对象的编程。
编辑:
假设我输入“eatBacon”作为输入
我希望x.y()转换为bacon.eatBacon()
答案 0 :(得分:3)
你可以,但不完全那样。
在Python中,函数就像任何其他变量一样,因此您可以像调整任何其他变量一样分配它们。利用这个,你可以得到这样的代码:
def eat_bacon():
return 'Om nom nom.'
call_map = {'eat': eat_bacon} # here, I am using the name of method
y = raw_input('Type eat: ')
print call_map[y]()
然而,当你有一个对象时它有点不同。您可以使用getattr
方法获取对象的属性,然后使用它:
class OmNom(object):
def __init__(self):
self.bacon = True
def eat(self):
self.bacon = False
return 'Om nom nom'
monster = OmNom()
y = raw_input('Type eat: ')
print getattr(monster, y)()
# This is the same as
# z = getattr(monster, 'eat')
# Now z points to the eat method of the object, then
# z() will call that method.
答案 1 :(得分:1)
答案 2 :(得分:1)
你应该这样做:
x.__dict__[y]()
python中的每个对象都有__ dict __,它给出了作为dict的类的所有方法的内省和访问。 一般来说,python中的所有内容都是字典。
答案 3 :(得分:0)
class Bacon:
def __init__(self):
self.bacon = True
def eatBacon(self):
self.bacon = False
print self.bacon
bacon = Bacon()
x = bacon
y = raw_input("eatBacon: ")
if hasattr(x, y):
print getattr(x, y)()
else:
print 'Method not found: %s' % str(y)
输出:
eatBacon: eatBacon
False
None