2013-10-21 115 views
0

這是我正在研究的一個python類的片段。 (對不起,我不能去太多的細節。我的組織變得有點坐立不安這樣的事情。爲什麼我的班級方法沒有約束?

class my_class: 

    @classmethod 
    def make_time_string(cls, **kwargs): 
    # does some stuff 

    @classmethod 
    def make_title(cls, **kwargs): 
    # does some other stuff 

    @classmethod 
    def give_local_time(cls, **kwargs): 
    # yet more stuff 

    @classmethod 
    def data_count(cls, **kwargs): 
    # you guessed it 

到目前爲止,一切都很好,我應該想到,但我使用這個類有麻煩。而且它原來,原因是後兩種方式都綁定:

>>> my_class.make_time_string 
<bound method classobj.make_time_string of <class __main__.my_class at 0x1cb5d738>> 
>>> my_class.make_title 
<bound method classobj.make_title of <class __main__.my_class at 0x1cb5d738>> 
>>> my_class.give_local_time 
<unbound method my_class.give_local_time> 
>>> my_class.data_count 
<unbound method my_class.data_count> 

對不起,再一次,我不能更多關於即將出臺的內容,但任何人都可以,爲什麼這些最後兩種方法想出一個理由。應該在前兩個綁定(正確)時解除綁定?

+0

後可重複的最小例子。我猜你是在某些情況下從其他類型的實例中查詢類型。 –

+0

這裏工作也很好。 'dir(my_class)'說什麼? – flup

+0

好吧,我是新來的python類,所以請原諒這個錯誤。在我的方法沒有綁定的地方,我有* instance *方法同名。我認爲python能夠分辨my_class.method()和my_instance.method()之間的區別。猜猜我錯了。我沒有真正看到這個寫在任何地方。有人能指點我嗎?謝謝。 –

回答

3

我試過你的公司德,它適用於我。

所以,你需要提供一個更好的例子。

我最好的猜測是你在某種程度上錯字@classmethod或不再在類定義或什麼。也許你會覆蓋classmethod修飾器?

這裏是我的代碼:

class my_class: 
    @classmethod 
    def make_time_string(cls, **kwargs): 
     pass 

    @classmethod 
    def make_title(cls, **kwargs): 
     pass 

    @classmethod 
    def give_local_time(cls, **kwargs): 
     pass 

    @classmethod 
    def data_count(cls, **kwargs): 
     pass 

print my_class.make_time_string 
print my_class.make_title 
print my_class.give_local_time 
print my_class.data_count 
相關問題