我有一个这样的课程:
class A:
def __init__(self):
self.size=0
def change_size(self,new):
self.size=new
我想在change_size方法中添加一个属性来说明它的变化 - 即这样
A(blah)
blah.change_size.modifies
返回
'size'
这可能吗?我试过了:
class A:
def __init__(self):
self.size=0
def change_size(self,new):
self.change_size.modifies = 'size'
self.size=new
没了
class A:
def __init__(self):
self.size=0
self.change_size.modifies = 'size'
def change_size(self,new):
self.size=new
没了
class A:
def __init__(self):
self.size=0
def change_size(self,new,modifies='size'):
self.size=new
似乎没有任何效果。
答案 0 :(得分:2)
这很简单。它基本上与您向任何其他函数添加属性的方式相同:
class A:
def __init__(self):
self.size=0
def change_size(self,new):
self.size=new
change_size.modifies = 'size'
print(A.change_size.modifies) # prints size
答案 1 :(得分:0)
带有帮助装饰器的更通用的解决方案。
from functools import wraps
def attribute_decorator(**attrs):
def attributes(f):
@wraps(f)
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
for attr_name, attr_value in attrs.items():
setattr(wrapper, attr_name, attr_value)
return wrapper
return attributes
并将您的课改写为
class A:
def __init__(self):
self.size=0
@attributes(modifies='size')
def change_size(self,new):
self.size=new