![](/img/trans.png)
[英]Django can't set attributes of built-in/extension type '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.