python-类-实时检测对象有多少个属性

运行效果:

c = Counter()
c.x = 1
print(c.counter)

>>> 1

c.y = 2
c.z = 3
print(c.counter)

>>> 3

print(c.attr_name)

>>> [x, y, z]

代码如下:

class Counter:

    def __init__(self):
            self.counter = 0    # 计算实例中属性个数
            self.attr_name = []  # 储存实例中的属性名

    def __setattr__(self, name, value):
            if name != 'counter' and name != 'attr_name':
                    if name not in self.attr_name:
                            self.counter += 1
                            self.attr_name.append(name)
            super().__setattr__(name, value)

    def __delattr__(self, name):
            self.counter -= 1
            self.attr_name.remove(name)
            super().__delattr__(name)
            

猜你喜欢

转载自blog.csdn.net/weixin_40960364/article/details/105899299