加載的類/模塊,如果我有像add方法在Python
import mynewclass
我可以添加一些方法來mynewclass?類似概念如下:
def newmethod(self,x):
return x + self.y
mynewclass.newmethod = newmethod
(我用的CPython 2.6)
加載的類/模塊,如果我有像add方法在Python
import mynewclass
我可以添加一些方法來mynewclass?類似概念如下:
def newmethod(self,x):
return x + self.y
mynewclass.newmethod = newmethod
(我用的CPython 2.6)
在Python import語句用於模塊,而不是類...所以導入你需要像
from mymodule import MyClass
更多你的問題點的答案是肯定的一類。在Python中,類只是常規對象,類方法只是存儲在對象屬性中的函數。
Python中的對象實例的屬性此外是動態的(您可以在運行時添加新的對象屬性),這一事實與前一個結合意味着您可以在運行時向類中添加新方法。
class MyClass:
def __init__(self, x):
self.x = x
...
obj = MyClass(42)
def new_method(self):
print "x attribute is", self.x
MyClass.new_method = new_method
obj.new_method()
這是如何工作的?當您鍵入
obj.new_method()
Python會執行以下操作:
找new_method
對象obj
內。
沒有找到它作爲實例屬性,它會嘗試尋找類對象的內部(可用作obj.__class__
),它將在其中找到該函數。
現在有點小小的詭計,因爲Python會注意到它發現的是函數,因此將它「包裝」在閉包中以創建所謂的「綁定方法」。這是必要的,因爲當您撥打obj.new_method()
時,您想調用MyClass.new_method(obj)
...換句話說,將函數綁定到obj
以創建綁定方法是需要注意添加self
參數的操作。
此綁定方法是由obj.new_method
返回的內容,然後這將最終調用,因爲該行代碼上的結尾()
。
如果該類的搜索也不會成功,而不是父類也都以特定的順序查找繼承的方法和屬性,因此搜索的東西更復雜的只是一點點。
是的,如果它是一個Python類型。除了你會在課堂上做,而不是模塊/包裝。
可能的使用:http://stackoverflow.com/questions/962962/python-changing-methods-and-attributes-at-runtime –