2009-04-20 34 views
6

Bu kodda gidenin ne işe çalışıyorum: BuradaPython Cmd modülü, sınıflara sorunu

#!/usr/bin/python 

import cmd 

class My_class (cmd.Cmd): 
    """docstring for Twitter_handler""" 
    def __init__(self): 
     super(My_class, self).__init__() 

if __name__ == '__main__': 
    my_handler = My_class() 

Ben My_class" nin üst sınıf değiştirirseniz ben

Traceback (most recent call last): 
    File "main.py", line 12, in <module> 
    my_handler = My_class() 
    File "main.py", line 9, in __init__ 
    super(My_class, self).__init__() 
TypeError: super() argument 1 must be type, not classobj 

olsun hata var "bir nesneye iyi çalışıyor. Nerede yanlış gidiyorum? new-style classes

cevap

9

super() çalışır.

Kodunuzun 'un Python 3.0'da bir istisna oluşturmayacağını unutmayın. senin MyClassobject uzanır eğer hala super() kullanabilirsiniz

import cmd 

class My_class(cmd.Cmd): 
    def __init__(self): 
     cmd.Cmd.__init__(self) 
7

cmd.Cmd Python 2.5, 2.6, 2.7, yeni bir stil sınıf değil için

+0

Bu, cmd modülü Python 3'te yeniden yazıldığından mı? – Teifion

+0

Hayır. Çünkü Python 3.0'da tüm sınıflar "yeni stil sınıfları" dır. – Stephan202

+0

(Aslında, 2.5 ile 3.0 cmd.py arasındaki fark, bu sürümler arasında çok az değişiklik yapıldığını gösterir.) – Stephan202

2

Yani super() kullanımını çalışmazsa. Bu, cmd.Cmd modülü yeni bir stil sınıfı değil olsa bile çalışır. Bunun gibi:

#!/usr/bin/python 

import cmd 

class My_class (cmd.Cmd, object): 
    """docstring for Twitter_handler""" 
    def __init__(self): 
     super(My_class, self).__init__() 

if __name__ == '__main__': 
    my_handler = My_class() 
1

:

+0

Bu benim için de işe yarıyor. Py2 veya Py3'teki herhangi bir garip yan etkiyle karşılaşan kimse var mı? – Technoloft