0

私は Oops に少し慣れていないので、Python クラスと混同しています。高校で C++ を勉強しましたが、当時勉強したのは C++ ではなかったことを知っています (クラスがあり、テンプレートがない C のようなものでした。 STL、または名前空間)

間違っていたら訂正してください。しかし、私にとってクラスは単なるオブジェクトの設計図ですよね?

C++ でクラスのインスタンスを作成したい場合 (たとえば、私のクラス名は「動物」です)

私はこれを行います: animal lion; またはコンストラクター(引数付き)がある場合、私だけがこれを行いますanimal tiger(4,5);

私が直面している問題は次のとおりです。

class animal:
    val = 5

コンストラクターやメソッドのない、単なる基本クラスです。

Python を使用すると、動物のインスタンスを作成せずに、動物をそのまま参照できます (C++ ではできませんよね?)

animal.val = 7

私が直面している別の問題は、インスタンスの作成中に常に括弧を使用する必要があることです。そうしないと、クラス自体を参照します。

例えば;

lion = animal
lion.val = 6
tiger = animal
print tiger.val

インスタンスを作成したい場合は、コンストラクター (C++ では必要ありませんでした)、特別な理由、または単に言語構文の問題を指定していなくても、括弧を使用する必要があります。

4

3 に答える 3

8

Python ではすべてがオブジェクトです。クラスは、他のオブジェクトを作成するオブジェクトです。

したがって、 を参照するときは、 classのclassプロパティをanimal.val参照しています。val animal

type のオブジェクトを実際に作成したい場合はanimal、クラスを呼び出してインスタンスを取得します。

your_animal = animal()

そのインスタンスに設定したものはすべて、そのインスタンスにのみ設定されます (クラスへの変更は、クラスを介して作成されたすべてのオブジェクト間で共有されます)。

Python のクラスの詳細については、こちらを参照してください。

于 2012-05-21T17:35:38.130 に答える
2

Python を使用すると、動物のインスタンスを作成せずに、動物をそのまま参照できます (C++ ではできませんよね?)

静的変数を宣言しました。ご覧のとおり、キーワードがないと少し混乱する可能性があります。あなたがしたことは、staticC++クラスと同じです

インスタンス変数を作成するには、明示的にインスタンスに割り当てる必要があります。

class animal:     
  def __init__(self):
     self.val = 0


your_animal = animal()
your_animal.val = 3

animal.valはグローバルに利用できなくなりました。

于 2012-05-21T17:36:22.623 に答える
2

C++ との類推を示すには (ちなみに、大文字の名前でクラスを宣言し、クラスとメンバーを小文字で変換することをお勧めします):

class Animal:
  val = 4 # class variable

  def __init__ (self, val = 0): # constructor (takes 0 or 1 argument)
    self.member_val = val # instance variable

animal = Animal(5)新しいインスタンスを作成するために呼び出します。Animal.valと のanimal.val違いを見る:

animal = Animal(5)
print Animal.val, animal.member_val
>>> 4 5

C++ の同等のコードは次のようになります。

class Animal {
  public:
    Animal() { // constructor with no arguments
       this.member_val = 0;
    }

    Animal(int val) { // constructor with argument
      this.member_val = val;
    }

  public:
    int member_val; // member (instance) variable allocated for each instance
    static int val = 4; // class level static variable
}

そしてクラスの使用法:

Animal animal = new Animal(5);
cout << Animal.val << " " << animal.member_val

>>> 5 4
于 2012-05-21T17:48:42.930 に答える