Python在创建属性和在类中声明属性之间有什么区别?

这两个代码会给出两个不同的输出,为什么?

class Test:
    def __get__(self, instance, owner):
        return 42
    def __set__(self, instance, value):
        pass

class A:
    a = Test()

a = A()
print(a.a) // print 42
a.a = 0
print(a.a) // print 42

class Test:
    def __get__(self, instance, owner):
        return 42
    def __set__(self, instance, value):
        pass

class A:
    pass

a = A()
a.a = Test()
print(a.a) // print <__main__.Test object at 0xb700d6cc>
a.a = 0
print(a.a) // print 0

如何在Python引擎中存储属性?

最佳答案 您的Test类不称为“属性”,它是一个
descriptor.根据定义,描述符仅在存储在(新样式,对于可怜的Python 2用户)类时才起作用.非类对象上的描述符对象没有特殊含义,它们被视为任何其他对象.检索它们时忽略它们的__get__方法,并且当它们被替换时忽略它们的__set__.

点赞