问题标签 [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 投票
4 回答
142 浏览

python - Python std 方法层次结构调用记录了吗?

刚刚在 dict "type" 子类化时遇到了问题。我确实重写了 __iter__ 方法,并预计它会影响其他方法,如 iterkeys、keys 等,因为我相信他们调用 __iter__ 方法来获取值,但似乎它们是独立实现的,我必须重写所有这些方法。

这是他们不使用其他方法并单独检索值的错误或意图吗?

我没有在标准 Python 文档描述中找到标准类的方法之间的调用依赖关系。对于子类化工作和定向需要哪些方法来覆盖正确的行为,这将很方便。是否有一些关于 python 基类型/类内部的补充文档?

0 投票
5 回答
49833 浏览

python - __ne__ 是否应该作为 __eq__ 的否定来实现?

我有一个要覆盖该__eq__方法的类。__ne__我也应该重写该方法似乎是有道理的。我应该__ne__作为否定来实施__eq__还是一个坏主意?

0 投票
3 回答
3869 浏览

python - python __getattr__ 帮助

读一本书,我遇到了这个代码......

它做了我想做的事,但我不明白课堂上的__getattr__功能Manager。我知道它代表了Person类的所有其他属性。但我不明白它的工作方式。例如为什么Person上课?因为我没有明确告诉它。人(模块不同于人(类)

非常感谢任何帮助:)

0 投票
1 回答
1144 浏览

python - Python数据模型文档:一个未绑定的用户定义方法对象和一个类方法对象

在参考资料的数据模型中,作者花费了大量精力来解释如何创建和操作用户定义的方法:(参见http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy和 roll下)

如果该属性是用户定义的函数对象、未绑定的用户定义的方法对象或类方法,则可以在获取类的属性(可能通过该类的实例)时创建用户定义的方法对象目的。当属性是用户定义的方法对象时,仅当从中检索它的类与存储在原始方法对象中的类相同或派生类时,才会创建新的方法对象;否则,原样使用原始方法对象。

那么未绑定的用户定义方法对象类方法对象有什么区别呢?

0 投票
1 回答
262 浏览

python - Python 数据模型:再次与类方法混淆

据说:

当它会产生一个类方法对象时,它会被转换为一个绑定的用户定义方法对象,其 im_class 和 im_self 属性都是 C。

参考

我做了一个EX。

我不难理解这种现象。但不幸的是,在参考文献中,它被告知 im_self 应该与 im_class相同。如何解释不一致?

0 投票
2 回答
1443 浏览

python - Python:重新定义了原始的“对象”类。如何找回“对象”类?

我正在为 Squish 自动化工具使用 python 语言。这个工具用一些自定义对象和函数扩展了 python。这就是他们在手册中所说的:

Squish 特定于 Python 的扩展模块通过在内部执行等效于以下语句的方式自动加载:

这意味着除非您正在开发自己的独立模块,否则不必自己导入它们。

通过这样做,他们会object自动重新定义(到this),所以我尝试做 New-Style Classes(如class NewClass(object):)给我一个错误:

TypeError:调用元类库时出错。module.__init__() 最多接受 2 个参数(给定 3 个)

所以我正在努力object挽回。在阅读了关于元类的精彩文章后,我尝试object使用以下代码获取:

object我的问题是:这与从原始类继承相同吗?

更新:我仅限于使用Python 2.4(如果重要的话)

谢谢!

0 投票
1 回答
5267 浏览

python - python属性查找过程如何工作?

当我说“python 属性查找过程”时,我的意思是:当你写 x.foo 时,python 做了什么?

在网上搜索我没有找到太多关于此的文档,我发现的最好的论文之一将过程恢复到以下步骤(您可以在此处查看完整文章)

  1. 如果 attrname 是 objectname 的特殊(即 Python 提供的)属性,则返回它。
  2. 检查 objectname.__class__.__dict__ 的 attrname。如果存在并且是数据描述符,则返回描述符结果。搜索 objectname.__class__ 的所有基以查找相同的案例。
  3. 检查 objectname.__dict__ 的 attrname,如果找到则返回。如果 objectname 是一个类,也搜索它的基类。如果它是一个类并且在它或其基中存在描述符,则返回描述符结果。
  4. 检查 objectname.__class__.__dict__ 的 attrname。如果存在且是非数据描述符,则返回描述符结果。如果它存在并且不是描述符,则返回它。如果它存在并且是一个数据描述符,我们就不应该在这里,因为我们会在第 2 点返回。搜索 objectname.__class__ 的所有基以查找相同的情况。
  5. 引发属性错误。

起初这似乎是正确的,但属性查找过程有点复杂,例如对于 x.foo,如果 x 是类或实例,它的行为就不一样了。

我发现了一些无法通过这种方式解释的样本。考虑以下python代码:

现在检查以下行与相应的输出:

我的结论是(考虑到我们正在搜索 x.foo):

  • __getattribute__ 对于 < type 'type' > 和 < type 'object' > 的实例是不同的。对于 C.foo(),首先在 C.__dict__ 上搜索 'foo',如果找到则返回(而不是搜索 type(C)),对于 x.foo(),在 type(x).__dict__ 上搜索 'foo' 和在 x.__dict__ 上。
  • __getattribute__ 方法总是在 type(x) 上解析,我不明白的是最后一种情况:c.__getattribute__, is not object contains a method __getattribute__ (and C继承 from object),那么为什么元类getattribute方法得到叫。

有人可以解释一下吗?或者告诉我在哪里可以找到有关此的一些文档,谢谢。

0 投票
2 回答
1560 浏览

python - 如何在 python 中获取传递给我的装饰器的函数的文件名?

我想获取正在装饰的函数的原始文件/脚本名等。我怎样才能做到这一点?

我尝试使用fn.__code__,但这给了我更多我需要的东西。我可以解析该字符串以获取函数名称,但想知道是否有更优雅的方法来做到这一点

0 投票
2 回答
156 浏览

python - 获取在方法中定义方法的类

如何获取在 Python 中定义方法的类?

例如

由于b.__class__始终是b的实际类(即B),而我想要的是实际定义方法的类(应该是A),所以self.__class__没用。

0 投票
1 回答
720 浏览

python - 如何让 Python 2 的 __getitem__ 在类上工作?

我如何进行项目访问,即。__getitem__在 Python 2.x 中的类对象上可用?

我试过了:

测试:

我如何__getitem__在课堂上工作?