擅长:python、mysql、java
<p>这是一个工作示例,使用<strong>描述符来修改<code>_counter</code>属性的行为,基于它是由<em>实例</em>(类)访问还是由<em>类</em>(本例中的元类)访问</p>
<pre><code>class descr:
def __init__(self):
self.counter = {}
self.previous_counter_value = {}
def __get__(self, instance, cls):
if instance:
return self.counter[instance]
else:
return self.counter
def __set__(self, instance, value):
self.counter[instance] = value
class MetaCounter(type):
_counter = descr()
def __new__(cls, name, bases, dict):
new_class = super().__new__(cls, name, bases, dict)
cls._counter[new_class] = 0
return new_class
def __call__(cls, *args, **kwargs):
cls._counter += 1
print(f'Instantiated {cls._counter} objects of class {cls}!')
return super().__call__(*args, **kwargs)
</code></pre>