2016-01-17 9 views
6

私はcsv.DictWriterクラスを使用している、と私はそれを継承させたい:Pythonの継承古いスタイルのタイプ

class MyObj(csv.Dictwriter): 
    ... 

しかし、このタイプは、古いスタイルのオブジェクトです。 MyObjは新しいスタイルのクラスになりますが、それでもcsv.DictWriterから継承できますか?

+2

'class MyObj(csv.DictWriter、object)'?例えば、 http://stackoverflow.com/q/11527921/3001761 – jonrsharpe

答えて

3

はい、あなただけの、あまりにも、objectから継承する必要があります:ダニエルとして

class MyObj(object, csv.DictWriter): 
    def __init__(self, f, *args, **kw): 
     csv.DictWriter.__init__(self, f, *args, **kw) 
+0

それでは、どのようにtheinit__メードゥが見えるのでしょうか? – NI6

+0

@ NI6:通常のクラスと同様に、回答を参照してください。 – Daniel

+2

これは、https://stackoverflow.com/a/11528159/321973が提案する逆の順序です。あなたの方法は 'object'のメソッドを' csv.Dictwriter'のメソッドよりも優先させるからです。そして、newstyleクラスを使用することのポイントは、明示的に特定の親クラスのメソッドを呼び出すのではなく、 'super()'を使用できることです。そうではありませんか? –

2

を正しくstates、あなたはobjectをミックスインする必要があります。しかし、新しいスタイルのクラスを使用しての一つの大きなポイントはまた、このようにあなたがelsewhere述べたように

class MyObj(csv.DictWriter, object): 
    def __init__(self, csvfile, mycustomargs, *args, **kwargs): 
     super(MyOobj, self).__init__(csvfile, *args, **kwargs) 
     ... 

objectを使用する必要があり、superを使用していることは、最後の親である必要があり、そのような__str____repr__としてそれ以外objectのデフォルトの方法でしょう他の親の実装をオーバーライドしてください。これはあなたが望むものではありません...