属性访问魔法方法重写中的一个问题

class A:
    def __init__(self):
        self.count=-1
    def __setattr__(self,name,value):
        super().__setattr__(name,value)
        super().__setattr__('count',self.count+1)
a=A()
a.count
0

class B:
    count=-1
    def __setattr__(self,name,value):
        super().__setattr__(name,value)
        super().__setattr__('count',self.count+1)
a=A()
a.count
-1

为什么类A中__init__方法给count赋值时会调用setattr()使count的值+1。而类B中直接给属性count赋值的操作没调用到setattr()?

init魔法方法会调用setattr,这是约定,后者你赋值不是在init里
所谓魔法,就是这个意思
要不为什么创建对象就会自动找到__init__而不是 __new__或者 __gouzao__