2011-10-31 49 views
0

我想在这种情况下,我可以在SQLAlchemy中保留我的数据库模式(通过类声明)。同时,我想对这些对象使用各种静态方法或实用方法。但我想保持模式清洁,只是模式。有没有办法编写这些额外的方法,让我可以在类的范围之外声明方法?谢谢。有没有办法将静态方法写入类之外的python类而不扩展类?

+0

技术上,我可以编写一个外部库来与对象进行交互。但我想知道是否有实现上述的方法?另外,你对这种“pythonic”方式有何看法? – nubela

回答

0

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

class Foo (object): 
    pass 

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

你的问题并不完全清楚。

+0

您的回答与我解释问题的方式相符。 –

0

由于在Python staticmethods只不过是绑定到一个类的简单的功能一样,你可以很容易地做到这一点是这样的:

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()) 
相关问题