2011-01-05 14 views
1
class Complex: 
    realpart,imagpart=0,0 
    def __init__(self): 
      self.r = Complex.realpart 
      self.i = Complex.imagpart 

x = Complex() 

上記のコードは動作しますが、XR、XI =(0,0)が、クラス名が大きい場合、クラスデータにアクセスするClass_name.Data_memberの道は非常に冗長に見える、いずれかがありますクラススコープを改善するために、私はComplex.imagpartを使う必要はありませんか?単にself.r = realpartを使用しますか?Pythonのクラスの名前空間とinit関数

+1

1.これはVisual Basicではありません。 2.組み込みの 'complex'型を使わないのはなぜですか? – AndiDog

+0

(C言語ではなく、 'C = ReallyReallyLongClassName'はどうやって' C.realpart'を使うのですか?)とにかくクラスレベルの定数でなければならないかどうかを考えてみてください。(Edit @AdniDog:あなたはポイントを逃していますが、VBはPythonとは異なるスコープを持つ唯一の言語ではなく、クラス名はちょっとですあまりうまく選択されていない - 例) – delnan

+0

Pythonの文を短縮するための方法はありません。 'C = WayTooLongClassName'は解決策ですが、私はこれまでPythonでこのようなものを使ったことは覚えていません。私は意図的に例としてVBを選択しました。なぜなら、ステートメントは非常に長くなる可能性があるからです。 – AndiDog

答えて

1

これは、あなたが何をしたいです:

メンバ変数へのアクセス
class Complex(object): 
    def __init__(self, realpart=0, imagpart=0): 
     self.realpart = realpart 
     self.imagpart = imagpart 

"self.realpart"コールです。使用していたのは、次のようにアクセスされるクラス属性です。

Complex.some_attribute 
+0

こんにちは、複合(オブジェクト)でのオブジェクトの使用は何ですか? –

+0

これはそれが継承したものです。すべての新しいスタイルのクラスは最終的に 'object'から継承します。例えば、 'Complex'から' SuperComplex'クラスを継承させるには、 'SuperComplex(Complex):' – Aphex

+0

thxというように書くといいでしょう。 –

0

いいえ。上記で指定したデータメンバーはクラスの属性なので、クラス名を指定する必要があります。必要に応じてself.r = self.__class__.realpartを使用できます。あなたがイニシャライザとしてこれらの値を使用しているように思われるので、realpartimagpartは全く冗長です。

(また、Pythonは複素数をネイティブサポートしていることに注意するだけな5 + 3Jとしてそれらを書く。。)

関連する問題