python - __bases__ 属性在哪里定义?
问题描述
我在python解释器中定义了一个python类
class A:
pass
我使用 A.__bases__ 获得 A 的基类,它显示
(object,)
但是当我输入 dir(A) 时,输出不包含 __bases__ 属性,然后我尝试 dir(object),__bases__ 也找不到,__bases__ 来自哪里?
解决方案
类中的__bases__
属性由元类中的描述符实现type
。不过,您必须小心一点,因为type
作为 Python 对象模型的构建块之一,它是其自身的一个实例,因此type.__bases__
不会做您想要进行自省的事情。
尝试这个:
descriptor = type.__dict__['__bases__']
print(descriptor, type(descriptor))
您可以使用自己的描述符重现相同的事物:
class MyMeta(type):
@property # a property is a descriptor
def foo(cls):
return "foo"
class MyClass(metaclass=MyMeta):
pass
现在,如果您访问MyClass.foo
,您将获得字符串foo
。但是您不会foo
在中定义的变量中看到MyClass
(如果您使用vars
or检查dir
)。您也不能通过MyClass
( my_obj = MyClass(); my_obj.foo
raises an AttributeError
) 的实例访问它。
推荐阅读
- python - 停止客户端,直到来自服务器的信号
- python - 如何以 emf/wmf 格式获取 matplotlib 图形?
- java - 在表单的选择框部分显示数组列表
- c# - Xamarin Mac,将 CGImage 转换为 .NET System.Drawing.Image
- ruby-on-rails - 阿帕奇无法启动乘客
- c - 带有clang的C大数组中的奇怪分段错误
- visual-studio-code - Visual Studio Code 添加表格会删除以前的表格
- mongodb - MongoDB 连接数如何计算?
- widget - Magento 2:如何创建带有动态字段的小部件?
- python - 如何在文件更改时使用 Gulp 重新启动散景服务器?