can a function be static and non-static in python 2

前端 未结 1 708
隐瞒了意图╮
隐瞒了意图╮ 2021-01-28 05:49

Lets say I have this class:

class Test(object):
    def __init__(self, a):
        self.a = a

    def test(self, b):
        if isinstance(self, Test):
                 


        
相关标签:
1条回答
  • 2021-01-28 06:11

    If you want something that will actually receive self if called on an instance, but can also be called on the class, writing your own descriptor type may be advisable:

    import types
    
    class ClassOrInstanceMethod(object):
        def __init__(self, wrapped):
            self.wrapped = wrapped
        def __get__(self, instance, owner):
            if instance is None:
                instance = owner
            return self.wrapped.__get__(instance, owner)
    
    class demo(object):
        @ClassOrInstanceMethod
        def foo(self):
            # self will be the class if this is called on the class
            print(self)
    

    Demo.

    For the original version of your question, you could just write it like any other static method, with @staticmethod. Calling a static method on an instance works the same as calling it on the class:

    class Test(object):
        @staticmethod
        def test(a, b):
            return a + b
    

    Demo.

    0 讨论(0)
提交回复
热议问题