有没有办法在不扩展类的情况下将staticmethods写入类之外的python类?

时间:2011-10-31 21:00:23

标签: python

我想在SQLAlchemy中保存我的数据库模式(通过类声明)的用例中。同时,我想对这些对象使用各种staticmethods或util方法。但我想保持架构干净,只是架构。有没有办法编写这些额外的方法,允许我声明类的范围之外的方法?感谢。

2 个答案:

答案 0 :(得分:0)

你的意思是这样的吗(lol()是一个静态的“注入”方法)?

class Foo (object):
    pass

Foo.lol = staticmethod (lambda: 1)
print Foo.lol ()

你的问题并不完全清楚。

答案 1 :(得分:0)

由于Python中的静态方法只不过是绑定到类的简单函数,所以你可以这样轻松地执行:

def pseudoStaticMethod ():
    return 'It works.'

class A:
    def __init__ ( self ):
        print( 'A.__init__:', pseudoStaticMethod() )

class B:
    def __init__ ( self ):
        print( 'B.__init__:', pseudoStaticMethod() )

或者如果你真的想将它们分配给类/对象:

def pseudoStaticMethod ():
    return 'It works.'

class A:
    myStaticMethod = staticmethod( pseudoStaticMethod )
    def __init__ ( self ):
        print( 'A.__init__:', self.myStaticMethod() )

class B:
    myStaticMethod = staticmethod( pseudoStaticMethod )
    def __init__ ( self ):
        print( 'B.__init__:', self.myStaticMethod() )

或者你甚至可以利用Python支持多重继承的事实:

class BaseClassWithAStaticMethod:
    @staticmethod
    def myStaticMethod ():
        return 'It works.'

class A ( BaseClassWithAStaticMethod ):
    def __init__ ( self ):
        print( 'A.__init__:', self.myStaticMethod() )

class B ( BaseClassWithAStaticMethod ):
    def __init__ ( self ):
        print( 'B.__init__:', self.myStaticMethod() )