是否可以将类方法创建为非装饰器?

问题描述 投票:0回答:1

假设我有以下课程:

class Item:
    def __init__(self, string=''):
        self.string = string
    @classmethod
    def from_string(cls, string):
        return cls(string=string)

上述情况下的类方法不是必需的,因为我可以很容易地调用Item(string='asdf')而不是Item.from_string(string='asdf'),但我只是以它为例。

是否可以在类本身之外附加任意classmethod?例如,类似:

def from_string(cls, string):
    return cls(string=string)

classmethod(from_string(Item, "asdf"))

或者,写这样的东西:

class Item:
    def __init__(self, string=''):
        self.string = string
    from_string = classmethod(f)
    def f(string):
        return Item(string)

[基本上,我试图更多地了解装饰器,以及如何在其正常上下文之外使用它们(以了解它们在幕后的工作)。

python python-3.x decorator class-method
1个回答
2
投票
@classmethod
def from_string(cls, string):
    return cls(string=string)

相当于

def from_string(cls, string):
    return cls(string=string)
from_string = classmethod(from_string)

class Item:
    def __init__(self, string=''):
        self.string = string
    from_string = classmethod(f)
    def f(string):
        return Item(string)

应重新排列为

class Item:
    def __init__(self, string=''):
        self.string = string
    def f(string):
        return Item(string)
    from_string = classmethod(f)
© www.soinside.com 2019 - 2024. All rights reserved.