class Descriptor(): def __get__(self, instance, owner): print("self: %s\ninstance: %s\nowner: %s" % (self, instance, owner)) class S: # 描述符的示例对象作为S的属性 attr = Descriptor() s1 = S() s1.attr # 访问对象属性 print("-" * 30) S.attr # 访问类属性
self: <__main__.Descriptor object at 0x030C02D0>
instance: <__main__.S object at 0x030C0AB0>
owner: <class '__main__.S'>
这里的 __main__ 表示 Descriptor 类和 S 类都是定义在当前作为主程序直接运行的这个 Python 脚本文件中的。Python 解释器在打印对象时,
<模块名.类名> 的格式来显示对象的来源,因为你的代码是在主程序中执行的,所以模块名就显示为了 __main____name__ 的内置变量,它的值取决于该模块是如何被使用的:python script.py),Python 会将该文件的 __name__ 变量自动设置为 "__main__"。import 语句引入的,那么它的 __name__ 会被设置为该文件的文件名(去掉 .py 后缀)