Python - 将不同类的对象传递给函数

时间:2012-04-19 22:24:46

标签: python class object dictionary

我在使用类和对象的python中遇到了一些麻烦。我有两个类,我实例化了每个类的对象。当用户键入某个字符串时,我想将这些对象传递给函数。然后该函数将调用它所使用的对象的类方法。 (这些方法对每个类都有相同的名称)。我在下面做了一个示例文件:

    class Test1(object):

       def method1(self):
          print("test1")

    class Test2(object):

       def method1(self):
          print("test2")


    def Call(something):
       return something.method1

    def Call2(something):
       y = input("> ")
       return something.method1

    array = [Test1(), Test2()]
    my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}


    x = input("> ")

    if x in my_dict:
       my_dict[x]()

我认为发生的是Call2()在运行时调用并请求输入。然后调用第二个input()。有人可以解释为什么Call2()运行,即使if语句没有机会评估字符串?可能有很多我误解的事情。任何帮助表示赞赏。

编辑:好的,我知道在dict声明期间会调用这些函数。在将对象传递给它的同时,如何将函数链接到dict?

4 个答案:

答案 0 :(得分:2)

  

问:有人可以解释为什么Call2()会运行,即使if语句没有机会评估字符串吗?

你在这里调用这两个函数:

my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}
  

问:在将对象传递给它的同时,如何将函数链接到dict?

通常做的是提供函数和args sepatate彼此。这是一个例子:

>>> def the_caller(f, args=()):
...     return f(*args)
... 
>>> def present_me(name):
...     return 'My name is ' + name
... 
>>> the_caller(present_me, args=('Rik',))
'My name is Rik'

您的示例代码设计太差,无法构建可能有意义的内容。

答案 1 :(得分:1)

您的代码在定义字典时会调用该函数。

my_dict = {'call': (lambda: Call(array[0])), 'call2': (lambda: Call2(array[1]))}

答案 2 :(得分:1)

当你运行它时,它将到达这一行:

my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}

这将调用CallCall2 - 这是调用第一个input的位置(如果您将input提示更改为不同的"> ",则可以看到此信息每一个,所以你可以分辨出哪一个被调用(即而不是{{1}})。

这会澄清事情,还是你不理解的不同之处?

答案 3 :(得分:0)

使用你的原始代码以及许多额外的东西,这应该做你想做的事情:

class Test1(object):

   def method1(self):
      print("test1")

class Test2(object):

   def method1(self):
      print("test2")

my_dict = {'call': Test1(), 'call2': Test2()}

x = input("> ")

if x in my_dict:
   my_dict[x].method1()