可以将类方法创建为非装饰器吗?
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)
假设我有以下 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)