说我想做到这一点,以便在我写的时候:

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

最佳答案

您可以,但不完全是那样。

在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.

08-26 20:23