2011-10-05 84 views
1

比方說,我有一個方法和類:我瞭解Python中實例屬性和類屬性之間的區別嗎?

def my_method(self): 
    self.mark = 'Knopfler' 

class MySubclass(object) 
    my_method = my_method 

我能想到的3或4種方式到其他類中使用my_method。

案例1: 如果我想有機會獲得的又一個類別像這樣內my_method:

class MyClass(object): 
    def __init__(self): 
     self.my_subclass = MySubclass() 

我在想,這將讓我在這樣的一個情況下使用my_method糾正:

my_inst = MyClass() 
my_inst.my_subclass.my_method() 

這似乎是工作像我期望的,但如果我不喜歡這樣寫道: 案例2:

class MyClass(object): 
    my_subclass = MySubclass 

my_inst = MyClass() 
my_inst2 = MyClass() 
my_inst.my_subclass.my_method() 

據我所知,上一行將應用my_methodmy_instmy_inst2。那是對的嗎?

案例3: 另一種方式來獲得my_method作爲MyClass的的屬性是:

class MyClass(object): 
    my_method = my_method 

,並按照我的理解,當我有MyClass的多個實例,應用my_method只會影響到的實例它是受約束的。那是對的嗎?

案例4(最後一個):

class MyClass(object): 
    def __init__(self): 
     self.my_method = my_method 

,並用此方法,最終的問題是,它似乎產生了my_method爲不受約束的方法,它不適合我的需要。有沒有辦法在類定義中將現有方法添加爲綁定實例方法?

好的。就這些。請讓我知道這四種情況中哪一種最適合使用。謝謝。

回答

1

回答你的最後一種情況下,可以將方法綁定到一個類的實例與MethodType

import types 

class MyClass(object): 
    def __init__(self): 
     self.my_method = types.MethodType(my_method, self) 
相關問題