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

Possible to create a classmethod as a non-decorator?

假设我有以下 class:

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

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

是否可以在 class 本身之外附加任意 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)

基本上,我试图更多地了解装饰器,以及如何在正常上下文之外使用它们(看看它们在幕后做了什么)。

@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)