Python:类的特殊属性

360影视 动漫周边 2025-09-04 13:59 1

摘要:类对象不仅定义了实例的行为,还携带了大量的特殊属性,用于描述类的名称、继承关系、方法解析顺序、命名空间、类型注解、文档、弱引用支持、slots 限制等。

在 Python 中,类本身也是对象(具体来说,是 type 的实例)。

类对象不仅定义了实例的行为,还携带了大量的特殊属性,用于描述类的名称、继承关系、方法解析顺序、命名空间、类型注解、文档、弱引用支持、slots 限制等。

理解这些属性对于元编程、调试、框架设计非常重要。

cls.__name__

类的名称(字符串)。

class Animal: passprint(Animal.__name__) # Animal

cls.__qualname__

类的完全限定名称,包含嵌套路径。

class Outer:class Inner: passprint(Outer.Inner.__qualname__) # Outer.Inner

cls.__module__

类定义所在的模块名。

import datetimeprint(datetime.date.__module__) # datetime

cls.__doc__

类的文档字符串(docstring)。如果未定义,则为 None。

class Product:"""商品类"""passprint(Product.__doc__) # 商品类

cls.__bases__

类的基类元组,顺序与定义时一致。

class A: passclass B(A): passprint(B.__bases__) #

cls.__mro__

方法解析顺序(Method Resolution Order),在多重继承时确定属性查找路径。

class A: passclass B(A): passclass C(B): passprint(C.__mro__)#

cls.__dict__

包含类属性与实例方法的字典(只读映射)。

注意:这里不会包含实例属性。

class Person:species = "human"def greet(self): return "hi"print(Person.__dict__["species"]) # human

cls.__annotations__

类变量的类型注解字典。

class Point:x: inty: intprint(Point.__annotations__) # {'x': , 'y': }

cls.__weakref__

允许类对象本身被弱引用。通常不直接操作,但框架可能会用到。

import weakrefclass A: passprint(hasattr(A, "__weakref__")) # True

cls.__slots__

在类中定义了 __slots__ 后,Python 不再为每个实例创建 __dict__,而是只允许实例拥有 __slots__ 指定的那些属性。

class User:__slots__ = ("name", "age") # 只允许这两个属性u = Useru.name = "Alice"u.age = 20print(u.name, u.age) # Alice 20u.address = "Beijing" # ❌ 报错:AttributeError

注意:__slots__ 仅对实例生效,不影响类本身的 __dict__。

定义了 __slots__ 后,默认情况下实例没有 __dict__。想要保留 __dict__,可以在 __slots__ 里显式加 "__dict__"。

class User:__slots__ = ("name", "__dict__")u = Useru.name = "Alice"u.age = 20 # ✅ 现在可以动态加属性了print(u.__dict__) # {'age': 20}

如果希望类的实例可以被弱引用,需要在 __slots__ 中加入 "__weakref__"。否则实例默认不能被弱引用。

小结

类对象的特殊属性大体可分为四类:

基本信息:__name__、__qualname__、__module__、__doc__

继承关系:__bases__、__mro__

命名空间与注释:__dict__、__annotations__

内存与限制:__weakref__、__slots__

这些属性揭示了类的定义位置、继承结构、方法解析规则、类型注解和内存优化机制。

在反射、自省、元编程、框架开发中,它们是理解和操作类对象的核心工具。

“点赞有美意,赞赏是鼓励”

来源:剧人之力

相关推荐