Python 获取类'上的属性集;属性方法';
我有一个简单的装饰器,它在装饰的方法上设置一个属性Python 获取类'上的属性集;属性方法';,python,Python,我有一个简单的装饰器,它在装饰的方法上设置一个属性mark='marked' def mark(fn): @wraps(fn) def wrapper(*args, **kwargs): return fn(*args, **kwargs) setattr(wrapper, 'mark', 'marked') return wrapper 我在类属性方法上使用它,如下所示 class Car(object): @property
mark='marked'
def mark(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return fn(*args, **kwargs)
setattr(wrapper, 'mark', 'marked')
return wrapper
我在类属性方法上使用它,如下所示
class Car(object):
@property
@mark
def move(self):
return "move"
既然Car.move
是一个属性方法,那么如何访问我创建的标记的
属性
>>> c = Car()
>>> getattr(c.move, 'mark')
AttributeError: 'str' object has no attribute 'mark'
该错误是有意义的,因为c.move
调用属性描述符上的\uuuu get\uuuu
方法,该方法返回字符串
有不同的方法吗?虽然可以访问该属性(
type(c).move.fget.mark
),但听起来您可能已经想到了一个特定的接口。该接口将导致比它解决的问题更多的问题。选择一个不同的界面。@user2357112supportsMonica。真管用!在不深入我的用例细节的情况下,这就是我要做的;我想使用装饰器来标记感兴趣的方法。在初始化类时,我想找到所有这些“标记”的方法,并做一些类似于构建它们列表的事情。例如,“标记”特定方法的通常方法是将所有此类方法的名称列表指定为类属性是一种奇怪的书写方式wrapper.mark='marked'
@epi当然,我也可以这么做。我只是试图通过使用decorator将业务逻辑与管理/应用程序逻辑分开。此外,我的decorator还执行wrapped
函数中的逻辑