在 Python 3.6 中,我可以使用__set_name__钩子来获取描述符的类属性名称。我如何在 python 2.x 中实现这一点?这是在 Python 3.6 中运行良好的代码:class IntField: def __get__(self, instance, owner): if instance is None: return self return instance.__dict__[self.name] def __set__(self, instance, value): if not isinstance(value, int): raise ValueError('expecting integer') instance.__dict__[self.name] = value def __set_name__(self, owner, name): self.name = nameclass Example: a = IntField()
2 回答
杨魅力
TA贡献1811条经验 获得超6个赞
您可能正在寻找元类,通过它您可以在类创建时处理类属性。
class FooDescriptor(object):
def __get__(self, obj, objtype):
print('calling getter')
class FooMeta(type):
def __init__(cls, name, bases, attrs):
for k, v in attrs.iteritems():
if issubclass(type(v), FooDescriptor):
print('FooMeta.__init__, attribute name is "{}"'.format(k))
class Foo(object):
__metaclass__ = FooMeta
foo = FooDescriptor()
f = Foo()
f.foo
输出:
FooMeta.__init__, attribute name is "foo"
calling getter
如果您需要在创建类之前更改类,您需要覆盖__new__而不是__init__在您的元类中。
添加回答
举报
0/150
提交
取消