簡體   English   中英

python無法設置內置/擴展類型'object'的屬性

[英]python can't set attributes of built-in/extension type 'object'

Python似乎不允許您將屬性分配給內部最高級別的“對象”:

object.lst=lambda o:list(o)

要么

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

全部生成錯誤消息。 它背后的設計原因是什么? 老實說,這很奇怪,因為一切都是對象,並且您可以根據需要定義func(obj) ,所以如果func不限制參數類型,那么為什么禁止添加方法呢? 如果將func分配為object的屬性, obj.func()就是func(obj)。 因為一切都是對象,所以對象的屬性幾乎是定義上的全局函數。

無論如何走動?

基本上,如果您能夠向內置類型添加一些功能,則可以執行管道樣式編程: obj.list().len().range()而且我認為此類型程序的可讀性非常明確,沒有任何意義非Python的。

我目前尚不確定實際的“設計”理由,盡管有-但事實是該對象,因為其他一些內置類是用本機代碼(稱為“內置”)編寫的-

由於這些內置類的性質(它們的代碼通常在C中),它們本身沒有__dict__屬性,因此,不允許進行任意參數設置。

函數對象在2.x開發周期的某個位置實現了__dict__屬性,因此它們可以保存任意屬性。

如果您需要某種可以用作“對象”但具有任意屬性的方法,那就是子類化對象,然后在其中添加屬性:

class MyObj(object): pass

MyObj.lst = lambda o: list(o)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM