擅长:python、mysql、java
<p>您可能正在寻找元类,有了它,您可以在类创建时处理类属性。在</p>
<pre><code>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
</code></pre>
<p>输出:</p>
^{pr2}$
<p>如果需要在创建类之前更改类,则需要在元类中重写<code>__new__</code>,而不是{<cd2>}。有关此主题的详细信息,请参阅此答案:<a href="https://stackoverflow.com/questions/1840421/is-there-any-reason-to-choose-new-over-init-when-defining-a-metaclass">Is there any reason to choose __new__ over __init__ when defining a metaclass?</a></p>