¿Qué tan diferente es el tipo .__ setattr__ del objeto .__ setattr__?

type.__setattr__ se usa para clases, básicamente instancias de metaclases.object.__setattr__ por otro lado, se usa para instancias de clases. Esto se entiende totalmente.

No veo una diferencia significativa entre los dos métodos, al menos a nivel de Python, noto que los dos usan los mismos procedimientos para la asignación de atributos, corrígeme si me equivoco:

Suponera es una instancia de una clase definida por el usuario, solo una clase normal:

class A:
    pass

a = A()
a.x = ...

entoncesa.x = .. invocatype(a).__setattr__(...) que realiza los siguientes pasos:

Nota:type(a).__setattr__ encontrará__setattr__ enobject clase integrada

1) Busque un descriptor de datos entype(a).__mro__.

2) Si se encontró un descriptor de datos, llame a su__set__ método y salir.

3) Si no se encontró un descriptor de datos entype(a).__mro__, luego agregue atributo aa.__dict__, a.__dict__['x'] = ...

Con clases - instancias de metaclases, el proceso es similar:

class A(metaclass=type):
    pass

entonces:A.x = ... se traduce atype(A).__setattr__(...) que realiza los siguientes pasos:

Nota:type(A).__setattr__ encontrará__setattr__ entype clase integrada

1) Busque un descriptor de datos entype(A).__mro__

2) Si se encontró un descriptor de datos, llame a su__set__ método y salir.

3) Si no se encontró un descriptor de datos entype(A).__mro__, luego agregue atributo aA.__dict__, a.__dict__['x'] = ...

Peroobject.__setattr__ no funciona para las clases:

>>> object.__setattr__(A, 'x', ...)
TypeError: can't apply this __setattr__ to type object

y viceversa,type.__setattr__ no funciona para instancias deA:

>>> type.__setattr__(A(), 'x', ...)
TypeError: descriptor '__setattr__' requires a 'type' object but received a 'A'

Hmmm! Debe haber algo diferente entre los dos métodos. ¡Esto es sutil, pero cierto de todos modos!

Presumiblemente, los dos métodos realizan los mismos pasos dentro__setattr__, Cuál es la diferencia entretype.__setattr__ yobject.__setattr__ así que esotype.__setattr__ se limita a clases yobject.__setattr__ se limita a instancias de clases?

Respuestas a la pregunta(1)

Su respuesta a la pregunta