1

私はOOPを始めたばかりで、このコードと混同しています-

class cartesianPoint:

       pass

cp1 = cartesianPoint()

cp1.x = 1.0

cp1.y = 2.0

cp1

>
<__main__.cartesianPoint instance at 0x0000000001E7EB88>

まず、クラスに属さないオブジェクトに新しい変数を追加できるのはなぜですか?クラスがオブジェクトの青写真である場合、オブジェクトはブループリントに従うべきではありませんか? Python ではそれが可能であるにもかかわらず、オブジェクトが同じクラスに属しているのはなぜでしょうか?

4

2 に答える 2

1

ここでセクション 9.4 を確認してください: http://docs.python.org/2/tutorial/classes.html

クライアントは、名前の競合が回避される限り、メソッドの有効性に影響を与えることなく、独自のデータ属性をインスタンス オブジェクトに追加できることに注意してください。

cp1は確かにCartesianPointクラスのインスタンスですが、その特定のインスタンスに 2 つの新しいデータ メンバーを追加したため、クラス自体や後続のインスタンスには影響しません。

CartesianPoint クラスの各インスタンスには、独自のフィールドとメソッドの辞書があることに注意してください。

于 2013-10-16T04:08:15.423 に答える
1

Python チュートリアル - Classes - Instance Objectsによると:

データ属性は、Smalltalk では「インスタンス変数」に対応し、C++ では「データ メンバー」に対応します。データ属性を宣言する必要はありません。ローカル変数と同様に、最初に割り当てられたときに発生します。

を使用する__slots__と、新しいインスタンス変数が割り当てられないようにすることができます。

于 2013-10-16T04:09:13.317 に答える