如何将类方法分配给类属性?

这个问题在这里已经有了答案:

  • 通过使用其名称(字符串)调用模块的功能10个答案

  • 请注意,当您尝试:

    class A:
        MAP = {
            'add' : A.add(x, y),
            'subtract' : A.subtract(x, y),
        }
    

    在名称A存在之前(该类未与名称绑定直到定义完成)以及在名称add存在之前(您尚未定义该方法),您正尝试访问例如A.add 。 类定义顶层的所有内容都按顺序完成。


    在类定义之后 ,您需要将类方法放入字典中(直到定义完成后才能调用它们):

    class A:
    
        MAP = {}
    
        @classmethod
        def add(cls, x, y):  # note colon
            return x + y
    
        @classmethod
        def subtract(cls, x, y):  # also here
            return x - y
    
    A.MAP['add'] = A.add
    A.MAP['subtract'] = A.subtract
    

    请注意,因为两个类方法都不使用cls ,所以您可以改为使用@staticmethod 。 或者只是使用函数 - Python不是Java,你不需要把所有东西都放到一个类中。


    或者,您可以使用getattr按名称访问属性(包括类方法):

    >>> class A:
    
            @classmethod
            def add(cls, x, y):
                return x + y
    
            @classmethod
            def subtract(cls, x, y):
                return x - y
    
    
    >>> getattr(A, 'add')(1, 2)
    3
    

    请不要使用python编程,而应使用更标准的oop方法,例如:

    #!/usr/bin/env python
    
    class A:
    
        def __init__(self):
            pass
    
        @classmethod
        def add(self, x, y):
            return x + y
    
        @classmethod
        def subtract(self, x, y):
            return x - y
    
    if __name__ == "__main__":
        a = A()
        print a.add(1,2)  # ans: 3
        print a.subtract(2,1) # ans: 1
    
    链接地址: http://www.djcxy.com/p/55173.html

    上一篇: How to assign class method to class attribute?

    下一篇: Call a function using getattr in Python