问题标签 [python-datamodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
470 浏览

inheritance - 如何在我的元类中获取类的父类?

我有以下脚本

我得到以下输出:

但我希望它:

我在哪里犯了错误?

0 投票
0 回答
29 浏览

python - 为什么类型子类对象?

我正在学习 Python 数据模型。我读过这篇文章

这个问题中,@poke 回答了内置函数的isinstance工作原理。它解释说:

所以我的问题是为什么type.__base__==object?什么issubclass(object,object)==True时候object.__bases__==()

只是为了保持“一切都是一个实例object”的统一吗?

0 投票
4 回答
891 浏览

python - 对于充当无限序列的对象,__len__ 的正确返回值

我正在编写一个 python 类,它充当不可变的无限序列。

该类不使用生成器来访问这个无限序列,而是根据方法中的算法为序列中的任意索引生成一个值__getitem__

我很好奇处理__len__这种对象的方法的最佳方法是什么。理想情况下,我会float("inf")通过__len__. 但是,在后台len()调用对象方法的函数需要一个特定的值。__len__

如果__len__设置为返回 float("inf") 或 decimal.Decimal("Infinity"),len()则通过引发 TypeError 来拒绝它。它还拒绝“-1”的值,这意味着序列是无限的。此外,当我尝试使用我之前编写的实际上确实继承自的无穷大类时intlen()无论出于何种原因返回 0。

虽然允许值只是“0”并不是一个主要的不便,虽然这样的类非常不寻常,但我仍然很想知道,有没有一种处理类的长度属性的好方法那是一个无限序列?

0 投票
3 回答
663 浏览

python - 未实现的 __init__()

我正在查看一些带有拼写错误的__init__()函数的代码(它总共有 3 个下划线而不是 4 个)。我意识到当一个对象找不到合适的__init__().

是否有自动插入的默认初始化程序?有没有__new__被调用的默认值?为什么带参数的构造函数会失败?

0 投票
1 回答
325 浏览

python - 为什么 Counter 的 __init__ 方法称为描述符?

我正在阅读 Counter 类的 __init__ 方法,看到了这个:

我不确定描述符是什么意思,所以我检查了python数据模型文档,发现了这个:

通常,描述符是具有“绑定行为”的对象属性,其属性访问已被描述符协议中的方法覆盖:__get__()、__set__() 和 __delete__()。如果为对象定义了这些方法中的任何一个,则称其为描述符。

这些方法似乎都不存在于类定义中,那么为什么将 __init_ 称为描述符?

0 投票
2 回答
1395 浏览

python - Schrödinger's variable: the __class__ cell magically appears if you're checking for its presence?

There's a surprise here:

It seems like the mere mention of __class__ is explicitly checked by the parser? Otherwise we should get something like

Indeed, if you modify to only check the key instead, i.e. check for '__class__' in locals(), then we only have self in scope as expected.

How does it happen that this variable gets magically injected into scope? My guess is this is something to do with super - but I didn't use super, so why does the compiler create an implicit closure reference here if it isn't needed?

0 投票
2 回答
14986 浏览

python - Python - 类 __hash__ 方法和集合

我正在使用类set()__hash__方法python来防止在集合中添加相同的哈希对象。根据python 数据模型文档set()将相同的哈希对象视为相同的对象,只需添加一次。

但它的行为不同如下:

在字符串值的情况下,它可以正常工作。

我的问题是:为什么相同的哈希对象在集合中不一样?

0 投票
2 回答
3904 浏览

python - Python数据模型和内置函数有什么关系?

当我在 Stack Overflow 上阅读 Python 答案时,我继续看到一些人告诉用户直接使用数据模型的特殊方法属性

然后我看到相互矛盾的建议(有时来自我自己)说不要这样做,而是直接使用内置函数和运算符。

这是为什么?Python数据模型内置函数的特殊“dunder”方法和属性之间有什么关系?

我什么时候应该使用特殊名称?

0 投票
1 回答
50 浏览

python - Python 世界中的预创建值

据我所知(如果我错了,请纠正我)Python解释器在启动时创建了一些值。

有没有办法找出这些值是什么?

0 投票
1 回答
331 浏览

python - 如何在子类上“取消定义”Python 魔术方法?

Python 3 中是否有办法指示一个类不支持其父类支持的某些操作?* 我知道类可以设置__hash__None指示一个类型是不可散列的,但这似乎并不普遍。

例如,假设我有一个带有__len__方法的集合类,并且我想创建一个子类来表示一个没有定义大小的无界集合。如果我在子类中设置__len__None,当我尝试获取集合的长度时,我会收到一条丑陋/令人困惑的错误消息。

我想得到一个错误,好像D根本没有定义__len__

这个问题是相关的,但是我的问题专门与魔术方法/运算符重载有关。由于直接在对象的类型上查找 Python 魔术方法,因此某些可能的方法(如覆盖__getattribute__或使用描述符)在这里不起作用。

*注意:我知道这会违反Liskov 替换原则,但如果我想要类型安全,我一开始就不会使用 Python。;)