Python の __init__() の内部と外部で定義された変数の違いは何ですか?

Linda Hamilton
リリース: 2024-10-27 03:54:02
オリジナル
207 人が閲覧しました

  What's the Difference Between Variables Defined Inside and Outside `__init__()` in Python?

変数の内部と外部の区別を詳しく調べる __init__()

次の 2 つのクラスについて考えてみましょう。

<code class="python">class WithClass ():
    def __init__(self):
        self.value = "Bob"
    def my_func(self):
        print(self.value)

class WithoutClass ():
    value = "Bob"

    def my_func(self):
        print(self.value)</code>
ログイン後にコピー

一見すると、これらのクラスは同じように見えます。ただし、値変数の配置に微妙な違いがあります。最初のクラス (WithClass) では、値は __init__() メソッド内で初期化されますが、2 番目のクラス (WithoutClass) では、値はメソッドの外で宣言されます。

__init__() 外部の変数 (クラス属性) と __init__() 内の変数 (インスタンス属性)

変数の配置によって、それがクラス属性であるかインスタンス属性であるかが決まります。

  • クラス属性: __init__() の外部で宣言された変数は、クラスのすべてのインスタンスで共有されます。これらには、WithoutClass.value などのクラス名を使用してアクセスできます。
  • インスタンス属性: __init__() 内で作成され、先頭に self が付加された変数。は各オブジェクト インスタンスに固有です。これらは、instance_of_WithClass.value などのオブジェクト自体を通じてのみアクセスできます。

配置の結果

この区別は、コードの動作とメンテナンスに影響を及ぼします。

  • メソッド内での使用: クラス属性は、宣言された場所に関係なく、クラス内のすべてのメソッドで使用できます。一方、インスタンス属性は、メソッド内で使用する前に宣言する必要があります。
  • クラス外部からのアクセス: クラス属性は、クラスを使用してクラス外部からアクセスできます。名前。ただし、インスタンス属性には、クラスのインスタンスを介してのみアクセスできます。
  • 属性の操作: クラス属性は、クラスのすべてのインスタンスに影響します。クラス属性を変更すると、すべてのインスタンスの値が変更されます。対照的に、インスタンス属性は、それが属する特定のオブジェクトにのみ影響します。

配置の選択

変数を配置する場所の選択は、変数を配置する方法によって異なります。クラス内で動作させたい。インスタンス間で一定の共有値が必要な場合は、クラス属性を使用します。各インスタンスに一意の値が必要な場合は、__init__() 内でインスタンス属性として作成します。

__init__() の内部と外部の変数の違いを理解することで、明確で予測可能な動作を持つクラスを設計できます。潜在的な混乱や落とし穴を回避します。

以上がPython の __init__() の内部と外部で定義された変数の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!