目次
1. 概念 " > 1. 概念
2. 属性" >2. 属性
2.1 メンバー属性" >2.1 メンバー属性
2.2 パブリック属性" >2.2 パブリック属性
3. パブリック属性の特徴" >3. パブリック属性の特徴
3.1 単一インスタンスのパブリックプロパティの呼び出しと変更" >3.1 単一インスタンスのパブリックプロパティの呼び出しと変更
ホームページ バックエンド開発 Python チュートリアル クラスのパブリック プロパティの概要

クラスのパブリック プロパティの概要

Jul 17, 2017 pm 03:58 PM
公的所有 属性

1. 概念

クラスのプライベート属性については前述しましたが、これはクラス内で直接アクセスできない属性です。しかし、直接アクセスできるプロパティが公共プロパティである場合はどうなるでしょうか?あまり。 __init__() コンストラクターのプロパティは基本的に外部からアクセスできますが、パブリック プロパティではありません。では、パブリック属性とは何でしょうか?

定義: パブリック属性と呼ばれる、このクラスに属するすべてのオブジェクトがアクセスできる属性を指します。

2. 属性

2.1 メンバー属性

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name    #  成员属性,属于某个实例对象
        self.job = job
        self.phone = phone
        self.__address = address

    def get_private(self):
        return self.__address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
p2 = Person('Ashlex', 'Police', '8833232', 'bj')
ログイン後にコピー
print(p1.job, p2.job)

# 输出
Doctor Police
ログイン後にコピー

Person クラスの下に 2 つのオブジェクト p1 と p2 を定義しました。明らかに、p1 が p2 のジョブ属性、つまり警察にアクセスする方法はありません。そして、コンストラクター __init__() 内の self.name などの属性はメンバー属性と呼ばれます。

2.2 パブリック属性

class Person(object):
    nationality = 'CN'   # 定义公有属性

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.address = address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
p2 = Person('Ashlex', 'Police', '8833232', 'bj')

print(p1.nationality)
print(p2.nationality)

# 输出

CN
CN
ログイン後にコピー

パブリック属性に関する限り、それにアクセスするすべてのインスタンスオブジェクトによって取得される値は同じです。

3. パブリック属性の特徴

パブリック属性にはアクセスするだけでなく、変更することもできます。

class Person(object):
    nationality = 'CN'   # 定义公有属性

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.address = address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
p2 = Person('Ashlex', 'Police', '8833232', 'bj')

print(Person.nationality)  # 调用 公有属性
Person.nationality = 'us'   # 改变 公有属性
print(Person.nationality)

#输出

CN 
us
ログイン後にコピー

3.1 単一インスタンスのパブリックプロパティの呼び出しと変更

# 依据上例

print("--------Befoer change---------")
print(Person.nationality)
print(p1.nationality)
print(p2.nationality)

print("--------after change---------")
print(Person.nationality)
p1.nationality = 'JP'
print(p1.nationality)
print(p2.nationality)


# 输出
ログイン後にコピー

--------変更前--------
CN
CN
CN
-- ------変更後---------
US
JP
US

変更前のp1はよく理解できます。なぜなら、誰もがクラス Person の public 属性の国籍を呼び出しているからです。 p1 と p2 の国籍属性は同じで、両方とも「CN」です。しかし、p1 が public 属性を変更した後、p2 の国籍属性が変更されなかったのはなぜでしょうか。 Person クラスを定義するとき、それは実際にはすでにメモリ内に存在しており、当然、このクラスの public 属性も含まれています。初期インスタンス p1 がクラス person の国籍属性を呼び出すとき、国籍という新しい属性を追加するのではなく、クラス内の国籍のメモリ アドレスを直接参照します。

以下に示すように:

print(id(Person.nationality))
print(id(p1.nationality))
print(id(p2.nationality))
print(Person.nationality, p1.nationality, p2.nationality)

#输出
1751236836128
1751236836128
1751236836128
CN CN CN
ログイン後にコピー

これは、なぜ Person クラスの国籍が「US」に変更されると、p2 も変更されるのかを説明できます。メモリ内の値を直接参照するためです。

p1.nationality = 'JP'
ログイン後にコピー

p1がnationality属性を直接割り当てた後、インスタンスp1は実際にnationalityと呼ばれる自分自身の新しいメンバー変数を追加します。名前が同じというだけで、両者に関連性はなく、メモリアドレスすら異なります。

# p1.nationality = 'JP'
print(id(Person.nationality))
print(id(p1.nationality))
print(id(p2.nationality))
print(Person.nationality, p1.nationality, p2.nationality)

#输出
2434579585096
2434579585152
2434579585096
US JP US
ログイン後にコピー
つまり、p1.nationality='JP'は、 Person クラスのパブリック属性を変更するのではなく、それ自体の新しいメンバー属性を作成するため、p1の変更はクラスのパブリック属性に影響を与えません。

以上がクラスのパブリック プロパティの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SyntaxErrorを発生させずにPythonで整数リテラルプロパティを取得する方法は? SyntaxErrorを発生させずにPythonで整数リテラルプロパティを取得する方法は? Aug 20, 2023 pm 07:13 PM

SyntaxError の代わりに intliteral 属性を取得するには、スペースまたは括弧を使用します。intliteral は Python の数値リテラルの一部です。数値リテラルには、次の 4 つの異なる数値型も含まれます。int(signed integers) - これらは、単に整数または整数と呼ばれることが多く、正の値です。

JavaでGsonを使用してJSONのプロパティの名前を変更するにはどうすればよいですか? JavaでGsonを使用してJSONのプロパティの名前を変更するにはどうすればよいですか? Aug 27, 2023 pm 02:01 PM

Gson@SerializedName アノテーションは JSON にシリアル化でき、指定された名前の値をフィールド名として持つことができます。このアノテーションは、Gson インスタンスに設定されているデフォルトのフィールド命名ポリシーを含む、あらゆる FieldNamingPolicy をオーバーライドできます。 GsonBuilder クラスを使用して、さまざまな命名戦略を設定できます。構文@Retention(value=RUNTIME)@Target(value={FIELD,METHOD})public@interfaceSerializedNameExample importcom.google.gson.annotations.*;

Python の dir() 関数: オブジェクトのプロパティとメソッドを表示する Python の dir() 関数: オブジェクトのプロパティとメソッドを表示する Nov 18, 2023 pm 01:45 PM

Python の dir() 関数: オブジェクトのプロパティとメソッドを表示します。特定のコード サンプルが必要です。 要約: Python は強力で柔軟なプログラミング言語であり、その組み込み関数とツールは開発者に多くの便利な機能を提供します。非常に便利な関数の 1 つは dir() 関数です。これを使用すると、オブジェクトのプロパティとメソッドを表示できます。この記事では、 dir() 関数の使用法を紹介し、具体的なコード例を通じてその機能と使用法を示します。テキスト: Python の dir() 関数は組み込み関数です。

Win11 ディスクのプロパティが不明な場合の対処方法 Win11 ディスクのプロパティが不明な場合の対処方法 Jul 03, 2023 pm 04:17 PM

Win11のディスクプロパティが不明な場合はどうすればよいですか?最近、Win11 ユーザーは、コンピュータを使用しているときにシステムによってディスク エラーが発生していることに気付きました。何が起こっているのでしょうか?そしてそれをどうやって解決するのでしょうか?詳細な操作方法を知らない友人も多いと思いますが、Win11 のディスク エラーを解決する手順をエディターが以下にまとめましたので、興味がある方はエディターをフォローして以下をお読みください。 Win11 ディスク エラーを解決する手順 1. まず、キーボードの Win+E キーの組み合わせを押すか、タスクバーのファイル エクスプローラーをクリックします; 2. ファイル エクスプローラーの右側のサイドバーで、側面を見つけてローカル ファイルを右クリックしますディスク (C:)、開いたメニュー項目で [プロパティ] を選択します; 3. ローカル ディスク (C:) の [プロパティ] ウィンドウ、[ツール] に切り替えます。

JavaScript における pageXOffset 属性の役割は何ですか? JavaScript における pageXOffset 属性の役割は何ですか? Sep 16, 2023 am 09:17 AM

ウィンドウの左上隅からドキュメントがスクロールされるピクセルを取得する場合は、pageXoffset プロパティと pageYoffset プロパティを使用します。水平ピクセルには pageXoffset を使用します。例 次のコードを実行して、JavaScript で pageXOffset 属性を使用する方法を学習できます - ライブ デモンストレーション<!DOCTYPEhtml><html> <head> <style> &amp

CSSのbottom属性構文 CSSのbottom属性構文 Feb 21, 2024 pm 03:30 PM

CSS の Bottom 属性の構文とコード例 CSS では、bottom 属性は要素とコンテナの下部の間の距離を指定するために使用されます。親要素の下部を基準とした要素の位置を制御します。ボトム属性の構文は次のとおりです: element{bottom:value;} ここで、element はスタイルが適用される要素を表し、value は設定されるボトム値を表します。 value にはピクセルなどの特定の長さの値を指定できます

ハースストーンの絶望の糸の属性の紹介 ハースストーンの絶望の糸の属性の紹介 Mar 20, 2024 pm 10:36 PM

絶望の糸はBlizzard Entertainmentの名作『ハースストーン』に登場するレアカードで、カードパック「ウィズベインのワークショップ」で入手できるチャンスがあります。 100/400の秘術ダストポイントを消費して、ノーマル/ゴールドバージョンを合成できます。ハースストーンの絶望の糸の属性の紹介: ウィズベインのワークショップ カード パックで確率で入手できるか、秘術の粉塵を通じて合成することもできます。レアリティ:レア 種類:呪文 クラス:デスナイト マナ:1 効果:すべてのミニオンに断末魔を与える:すべてのミニオンに1ダメージを与える

Vue.set関数を使用して属性を動的に追加する方法と例 Vue.set関数を使用して属性を動的に追加する方法と例 Jul 24, 2023 pm 07:22 PM

Vue.set 関数を使用してプロパティを動的に追加する方法と例 Vue では、既存のオブジェクトにプロパティを動的に追加する場合、通常は Vue.set 関数を使用します。 Vue.set 関数は Vue.js によって提供されるグローバル メソッドであり、プロパティを追加するときに確実に応答性の高い更新を行うことができます。この記事では、Vue.set の使用方法を紹介し、具体的な例を示します。まず、Vue では通常、data オプションを使用してレスポンシブ データを宣言します。

See all articles