首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以在不扩展类的情况下将静态方法写到类之外的python类中?

有没有一种方法可以在不扩展类的情况下将静态方法写到类之外的python类中?
EN

Stack Overflow用户
提问于 2011-11-01 05:00:23
回答 2查看 47关注 0票数 0

我希望在这样的用例中,我可以将我的DB模式(通过类声明)保存在SQLAlchemy中。同时,我想将各种静态方法或util方法添加到这些对象中。但我希望保持架构的整洁,只做架构。有没有一种方法可以编写这些额外的方法,使我可以在类的范围之外声明方法?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-01 05:09:41

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

代码语言:javascript
复制
class Foo (object):
    pass

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

你的问题不完全清楚。

票数 0
EN

Stack Overflow用户

发布于 2011-11-01 05:32:12

因为Python中的静态方法只不过是绑定到一个类的简单函数,所以您可以很容易地这样做:

代码语言:javascript
复制
def pseudoStaticMethod ():
    return 'It works.'

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

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

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

代码语言:javascript
复制
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支持多重继承的事实:

代码语言:javascript
复制
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() )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7959692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档