Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—将不同类的对象传递到函数中_Python_Class_Object_Dictionary - Fatal编程技术网

Python—将不同类的对象传递到函数中

Python—将不同类的对象传递到函数中,python,class,object,dictionary,Python,Class,Object,Dictionary,我在python的类和对象方面遇到了一些问题。我有两个类,每个类都实例化了一个对象。我想在用户键入某个字符串时将这些对象传递到函数中。然后,该函数将调用它接受的对象的类方法。(每个类的方法具有相同的名称)。我在下面制作了一个示例文件: class Test1(object): def method1(self): print("test1") class Test2(object): def method1(self):

我在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()。有人能解释一下为什么即使if语句没有机会计算字符串,Call2()也会运行吗?我可能误解了很多事情。感谢您的帮助


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

您的代码在定义dict时调用函数

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

您的代码在定义dict时调用该函数

my_dict = {'call': (lambda: Call(array[0])), 'call2': (lambda: Call2(array[1]))}
问:有人能解释一下为什么即使if语句没有机会计算字符串,也会运行
Call2()

您在此处调用这两个函数:

my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}
问:在将对象传递给dict的同时,如何将函数链接到dict

通常所做的是提供函数,并且参数彼此分离。下面是一个例子:

>>> 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'
您的示例代码设计得太糟糕,无法构建有意义的东西

问:有人能解释一下为什么即使if语句没有机会计算字符串,也会运行
Call2()

您在此处调用这两个函数:

my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}
问:在将对象传递给dict的同时,如何将函数链接到dict

通常所做的是提供函数,并且参数彼此分离。下面是一个例子:

>>> 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'

您的示例代码设计得太糟糕,无法构建有意义的东西。

运行此命令时,它将到达以下行:

my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}
这将调用
call
Call2
——这是调用第一个
输入
的地方(如果您将
输入
提示更改为不同的提示,则可以看到这一点,这样您就可以知道调用的是哪一个(即,而不是
“>”


这是否澄清了问题,或者是您不理解的其他问题?

当您运行此程序时,它将到达以下行:

my_dict = {'call': Call(array[0]), 'call2': Call2(array[1])}
这将调用
call
Call2
——这是调用第一个
输入
的地方(如果您将
输入
提示更改为不同的提示,则可以看到这一点,这样您就可以知道调用的是哪一个(即,而不是
“>”


这是澄清了问题,还是你不理解的地方有所不同?

使用你的原始代码和大量额外的内容,这应该可以做你想做的事情:

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

使用您的原始代码和大量额外的内容,这应该可以完成您想要做的事情:

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

这很有意义,谢谢。我只需要一种方法在dict中声明它而不调用它。@user1343005,如果我理解正确,您希望在不调用函数的情况下将函数绑定到特定参数。一种方法是创建一个新函数,使用
lambda
像这样:
my_dict={'call:lambda:call(数组[0]),“call2”:lambda:call2(数组[1])}
。请参阅。这很有意义,谢谢。我只需要一种方法在dict中声明它而不调用它。@user1343005,如果我理解正确,您希望在不调用函数的情况下将函数绑定到特定参数。一种方法是使用
lambda
创建新函数,如下所示:
my_dict={'call':lambda:call(数组[0]),'call2':lambda:call2(数组[1])
。请参阅。谢谢,但我的目的是字符串告诉对象调用哪个方法。因此,稍后的事件可以更改对象,然后字符串将链接到新对象,调用相同名称的方法谢谢,但我的目的是字符串告诉对象调用哪个方法。因此,稍后的事件可以更改对象t、 然后字符串将链接到新对象,调用相同名称的方法