Python:如何修饰函数以将其更改为类方法
我有这样的代码,我想写一个decorator,它将添加decorated函数作为类A的类方法Python:如何修饰函数以将其更改为类方法,python,decorator,python-decorators,Python,Decorator,Python Decorators,我有这样的代码,我想写一个decorator,它将添加decorated函数作为类A的类方法 class A: pass @add_class_method(A) def foo(): return "Hello!" @add_instance_method(A) def bar(): return "Hello again!" assert A.foo() == "Hello!" assert A().b
class A:
pass
@add_class_method(A)
def foo():
return "Hello!"
@add_instance_method(A)
def bar():
return "Hello again!"
assert A.foo() == "Hello!"
assert A().bar() == "Hello again!"
这就是你想要的:
A类:
定义初始化(自):
通过
@类方法
def foo(cls):
回答“你好!”
def bar(自):
返回“你好!”
打印(A.foo())
打印(A().bar())
请阅读此处
class-MyClass:
def方法(自我):
#实例方法
返回'instance method called',self
@类方法
def cls_方法(cls):
#类方法
返回“调用的类方法”,cls
@静力学方法
def static_方法():
#静态法
返回“调用静态方法”
您需要实例化MyClass以访问(调用)实例方法
test=MyClass()
试验方法()
您可以直接访问类方法,而无需实例化
MyClass.cls_方法()
MyClass.static_方法()
这种方法怎么样?另外,为了清晰起见,代码未进行结构优化
from functools import wraps
class A:
pass
def add_class_method(cls):
def decorator(f):
@wraps(f)
def inner(_, *args, **kwargs):
return f(*args, **kwargs)
setattr(cls, inner.__name__, classmethod(inner))
return f
return decorator
def add_instance_method(cls):
def decorator(f):
@wraps(f)
def inner(_, *args, **kwargs):
return f(*args, **kwargs)
setattr(cls, inner.__name__, inner)
return f
return decorator
@add_class_method(A)
def foo():
return "Hello!"
@add_instance_method(A)
def bar():
return "Hello again!"
assert A.foo() == "Hello!"
assert A().bar() == "Hello again!"
你是说
@classmethod
?作者似乎想动态添加一个classmethod,我不这么认为。我猜它必须是类的方法,而不是@classmethod。不,我必须编写这两个装饰器的代码:add_class_方法和add_instance_方法。这段代码只是一个结果的示例。但是我的类在开始时应该是空的,我必须通过这些decorators def add_class_method(A):def real_decorator(func):def wrapper(*args,**kwargs):return func(*args,**kwargs)return wrapper()添加方法foo和bar归还真实的装饰师我已经通过了装饰师的课程,但我不知道如何用预定的方法归还。谢谢,答案解释得很好