当前位置: 首页 > 面试题库 >

从另一个类调用类方法

仲孙温文
2023-03-14
问题内容

在Python中,有没有一种方法可以从另一个类中调用一个类方法?我正在尝试在Python中旋转自己的MVC框架,但无法弄清楚如何从另一个类的一个类调用方法。

这是我想发生的事情:

class A:
    def method1(arg1, arg2):
        # do code here

class B:
    A.method1(1,2)

我正在从PHP慢慢进入Python,因此我正在寻找与PHP等效的Python call_user_func_array()


问题答案:

更新:刚刚call_user_func_array在您的帖子中看到了对它的引用。那不一样。用于getattr获取函数对象,然后使用您的参数调用它

class A(object):
    def method1(self, a, b, c):
        # foo

method = A.method1

method现在是一个实际的函数对象。可以直接调用(函数是python中的一流对象,就像PHP>
5.3中一样)。但是下面的考虑仍然适用。也就是说,除非您A.method1使用下面讨论的两个装饰器中的一个进行装饰,将其A作为第一个参数传递给实例或在的实例上访问方法,否则以上示例将爆炸A

a = A()
method = a.method1
method(1, 2)

您有三种选择

  1. 使用的实例A进行呼叫method1(使用两种可能的形式)
  2. classmethod装饰器应用于method1:您将不再能够引用其中selfmethod1但在这种情况下,您将cls在该位置传递一个实例A
  3. 在应用staticmethod装饰器method1:您将不再能够引用self,或clsstaticmethod1但你可以硬编码到引用A到它,但很明显,这些文献将被所有子类继承A,除非他们专门覆盖method1,不叫super

一些例子:

class Test1(object): # always inherit from object in 2.x. it's called new-style classes. look it up
    def method1(self, a, b):
        return a + b

    @staticmethod
    def method2(a, b):
        return a + b

    @classmethod
    def method3(cls, a, b):
        return cls.method2(a, b)

t = Test1()  # same as doing it in another class

Test1.method1(t, 1, 2) #form one of calling a method on an instance
t.method1(1, 2)        # form two (the common one) essentially reduces to form one

Test1.method2(1, 2)  #the static method can be called with just arguments
t.method2(1, 2)      # on an instance or the class

Test1.method3(1, 2)  # ditto for the class method. It will have access to the class
t.method3(1, 2)      # that it's called on (the subclass if called on a subclass) 
                     # but will not have access to the instance it's called on 
                     # (if it is called on an instance)

请注意,就像self变量名完全取决于您一样,变量名也完全取决于您,cls但这些是常规值。

现在您知道该怎么做了,我会认真考虑 是否 要这样做。通常,本应被称为未绑定(无实例)的方法最好保留为python中的模块级函数。



 类似资料:
  • Java,我们可以从另一个类调用main()方法吗?例如,ClassA应该在命令行上运行,因为它定义了main(String[]args)方法。 我想把这个叫做ClassA,在ClassB里面。是否初始化类的新对象,如 或者是否有一种方法可以在ClassB中传递ClassA的命令行选项。 谢啦

  • 问题内容: 我正在研究一个问题,但由于刚开始学习Java而感到非常困惑。我可以理解的任何帮助都会很棒。我必须编写一个具有两个类的程序。主类将从文件中读取内容,并使用第二类来查找文件中相同单词被重复的次数,然后将它们添加到包含单词和单词重复次数的数组中。我可以阅读文件部分。我只是似乎不知道如何从第二个类调用方法以将单词添加到数组并增加计数器。到目前为止,这是我的代码,如果您运行它,您将看到多少错误会

  • 问题内容: 我知道这个问题是重复的,但是我在Internet上找不到答案。 我想从另一个类调用一个方法。 我有Class1和Class2。 在第2类中,我具有该方法: 我想从Class1调用该方法。 感谢您的任何答复。 - - 编辑 - - -— LogCat– 问题答案: 您应该使用以下代码: 如果您不想创建一个新的实例来调用该方法,则可以将方法标为十进制,然后只需调用即可。

  • 我正在开发一个程序,在这个程序中,我必须调用一个提示用户从另一个类输入数据的方法。这个程序应该打印客户的姓名、年龄、地址和性别。然而,我在调用一个输入每个客户信息的方法时遇到了问题。 此外,我还必须创建一种方法,将客户的年龄按升序排序。因此,该程序根据年龄从(最年轻的客户)到(最老的客户)的顺序打印出所有信息。我不知道如何创建一种只对客户年龄进行排序而不对姓名、地址和性别进行排序的方法。如果您有任

  • 嗨我正在努力解决我面临的问题 我想做的是调用test1类的zahl方法 这是我尝试过的,但它什么也没有返回,即使它应该显示我的错误。

  • 我想从class1调用class2,但是class2没有一个可以引用的主函数,比如