将变量内容转换为代码行

时间:2013-12-10 06:51:37

标签: python oop

说我想这样做,当我写作时:

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

4 个答案:

答案 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)

一种方法是

method = getattr(x, y)
method()

getattr非常通用,可以在许多其他需要按名称获取对象属性的地方使用。有关详细信息,请参阅here

答案 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