gpt4 book ai didi

python 无法设置内置/扩展类型的属性 'object'

转载 作者:行者123 更新时间:2023-11-28 21:21:29 25 4
gpt4 key购买 nike

Python 似乎不允许您将属性分配给“对象”的内部最高级别:

object.lst=lambda o:list(o)

或者

func=lambda o:list(o)
setattr(object,'lst',func)

所有生成错误消息。背后有什么设计原因吗?老实说,这很奇怪,因为一切都是对象,你可以随心所欲地定义 func(obj) ,所以如果 func 没有限制参数类型,为什么方法 way 被禁止添加 then ?如果将 func 作为属性分配给 object,则 obj.func() 就是 func(obj)。由于一切都是对象,因此对象的属性几乎按照定义是一个全局函数。

无论如何都要四处走走?

基本上,如果您有能力向内置类型添加一些函数,您可以进行管道式编程:obj.list().len().range() 我认为此类程序的可读性非常清晰,没有任何非 Python 风格。

最佳答案

我目前不确定实际的“设计”推理,虽然有 - 但事实是对象,因为一些其他内置类是用 native 代码编写的(称为“内置” )-

由于这些内置类的性质(它们的代码通常在 C 中),它们本身没有 __dict__ 属性,因此不允许任意参数设置。

函数对象在 2.x 开发周期的某处实现了一个 __dict__ 属性,因此它们可以包含任意属性。

如果您需要像“对象”一样工作但具有任意属性的东西,方法是对对象进行子类化,然后在其中添加您的属性:

class MyObj(object): pass

MyObj.lst = lambda o: list(o)

关于python 无法设置内置/扩展类型的属性 'object',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com