プライベート属性を呼び出すpythonのメソッドの概要

クラスを定義するとき、開発を支援するためにプライベート属性を定義することがあります。プライベートは、この属性をプライベート属性として変更するために他の言語でよく使用されます。しかし、あなたは知っていますか?同じことが私有財産であり、いくつかの開発言語は真の私有財産であり、いくつかは偽の私有財産です。

例:OC開発プロセスに表示されるプライベート属性は偽のプライベート属性であり、実行時に簡単に取得および変更できます。同時に、swiftのプライベート属性は真のプライベート属性であり、通常はプライベートで変更する必要があります。

では、Python開発では、プライベート属性をどのように定義しますか?慣例として、通常、属性の前に2つの下線を追加します。つまり、__ ageはプライベート属性を表します。

あなたは質問があるかもしれません、このプロパティは本当の私有財産ですか、それとも偽の私有財産ですか?

まず、クラスを定義し、クラス内の2つのプロパティを初期化します。そのうちの1つはプライベートです。次のように:

classPerson(object):
# コンストラクタ
def__init__(self,name):
self.name=name
self.__age=18

オブジェクトを作成し、name属性を初期化します。

obj=Person("lily")print(obj.name)

モジュールを実行すると、次のように出力されます:lily

したがって、プライベートプロパティにアクセスする方法:

print(obj.__age)

モジュールを実行した後、コンソールは次のように出力します。

‘Person’ object has no attribute ‘__age’

年齢はプライベート属性であるため、この属性に直接アクセスすることはできません。

正しい呼び出し方法は次のとおりです。

print(obj._Person__age)

コンソールは印刷できます:18

同様に、プライベート属性を再割り当てできます

obj._Person__age = 20

print(obj._Person__age)

コンソールは印刷できます:20

別のクラスを作成してPersonを継承する場合、どのようにしてプライベートプロパティにアクセスし、変更を加えることができますか?

classStudent(Person):def__init__(self):
self.__gender='male'
stu=Student()print(stu._Student__gender)

コンソールが印刷されます:男性

親クラスのプライベートプロパティにアクセスするとどうなりますか?

print(stu._Person__age)

このとき、コンソールは次のように出力します。「Student」オブジェクトには属性「_Person__age」がありません

これはさらに、プライベートプロパティを継承できないことを証明しています。

プライベート属性は、Pythonでは偽のプライベート属性であることがわかります。それなら、構文的にプライベートフィールドのプライバシーを保証してみませんか?最も簡単な文で:私たちは皆、ここで大人に同意しています。 Pythonプログラマーの視点として:閉じているよりも開いている方が良いです。

要約すれば:

Pythonコンパイラは、プライベートフィールドのプライバシーを厳密に保証することはできません。

サブクラスが管理下にない場合にのみ、名前の競合を回避するためにプライベート属性の使用を検討できます。

拡張の例:

#! encoding=UTF-8classA:
 def __init__(self):
    
 # プライベート属性を定義する
 self.__name ="wangwu"
    
 # 共通の属性定義
 self.age =19
    
a =A()
 
# 通常の出力
print a.age
 
# 属性が見つからないことを確認する
print a.__name

実行出力:

Traceback (most recent call last):
File “C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py”, line 19, in <module
print a.__name
AttributeError: A instance has no attribute ‘__name‘

Recommended Posts

プライベート属性を呼び出すpythonのメソッドの概要
Pythonの対数法の要約
200のPython標準ライブラリの要約!
Python組み込み例外タイプの包括的な要約
Pythonでプライベート属性を定義する方法
Pythonタイムモジュールの一般的な操作の概要
Pythonの解凍に関する知識ポイントの要約
Python3.9の7つの機能
Pythonの基本的な要約
C言語プログラムを呼び出すPythonのメソッド分析
Python2とPython3の違いの簡単な要約
Python処理jsonの概要
Pythonインタビューの質問の概要
Python構文の基本
Pythonの高度な使用法の概要
Pythonの基本構文
Pythonの基礎知識(1)
pythonのPrettytableモジュール
09.Python3の共通モジュール
ubuntuの使用法の概要
Pythonの基盤を統合する(4)
Pythonの上位関数の使用法の概要!
Python(7)の基盤を統合する
pythonリスト(LIST)の深い理解
Pythonのタプルの添え字
wavファイルのPython分析
Python(6)の基盤を統合する
Python日時処理時間の概要
栄光のパイソンキング壁紙
Python(5)の基盤を統合する
Pythonサンドボックスエスケープの分析
Python3.10のいくつかの新機能
Pythonマルチスレッドの深い理解
Pythonオブジェクト指向プログラミングの分析
OpenCVインストールのPythonバージョン
さまざまなubuntu問題の要約
Pythonの9つの機能エンジニアリング手法
python描画モジュールのmatplotlib
パラメータを渡すPythonメソッド
Pythonの基盤を統合する(3)
Python共通モジュールのコレクション
Pythonの上位関数の使用法の概要!