在 Python 3.6 中,我可以使用__set_name__鉤子來獲取描述符的類屬性名稱。我如何在 python 2.x 中實現(xiàn)這一點?這是在 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條經(jīng)驗 獲得超6個贊
您可能正在尋找元類,通過它您可以在類創(chuàng)建時處理類屬性。
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
如果您需要在創(chuàng)建類之前更改類,您需要覆蓋__new__而不是__init__在您的元類中。
添加回答
舉報
0/150
提交
取消