Pythonでプライベート属性を定義する方法

PythonにはJavaのようなプライベートキーワードはありませんが、クラスのプライベート属性を定義することもできます。属性名を__fieldなどの__で始まるように変更するだけです。

サンプルコード:

classVector2D(object):
 def __init__(self, x, y):
 self.__x =float(x)
 self.__y =float(y)
 self.xx = x
 self.yy = y 
 def get_x(self):return self.__x #内部アクセス
if __name__ =="__main__":
 v =Vector2D(3,4)
 print v.__dict__
 print v._Vector2D__x, v.get_x()#しかし、あなたはvを渡すことができます._Vector2D__x外部アクセス
 v.__x #外部アクセス

出力:

{' yy':4,'xx':3,'_Vector2D__x':3.0,'_Vector2D__y':4.0}3.03.0Traceback(most recent call last):...
v.__x
AttributeError:'Vector2D' object has no attribute '__x'

上記の例からわかるように:

  1. __ フィールドはコンパイラによって_className__fieldに名前が変更されました

  2. Obj .__ fieldはクラス外ではアクセスできませんが、クラス内でアクセスできます

  3. ただし、これは不注意による呼び出しのみを防止でき、悪意のある呼び出しは防止できません。FluentPythonの言葉を借りれば、これはセキュリティデバイスではなく、安全デバイスです。マンダリンでは、objを渡すことができるため、紳士がxxを防ぐことができます。 ._className__fieldは、objのプライベート__fieldに外部からアクセスします。

補足知識:pythonのプライベート属性とプライベートメソッド、プライベート属性の値を変更する

属性が2つの下線で始まる場合、この属性がプライベート属性であることを示します

self.__money = 1000000

メソッドが2つの下線で始まる場合、それはプライベートであることも意味します

親クラスのプロパティがプライベートの場合、子クラスは親クラスを継承します。子クラスには継承されません。

クラスではプライベートプロパティとプライベートメソッドを使用できます

カスタムクラスの属性がプライベートの場合、クラス外で呼び出すことはできません

プライベート属性の値を変更する

オブジェクトの属性値を変更する必要がある場合、通常は2つの方法があります

オブジェクト名。属性名=データ—直接変更
オブジェクト名。メソッド名()---間接的な変更

プライベート属性には直接アクセスできないため、最初の方法で変更することはできません。通常、プライベート属性の値は、呼び出すことができるパブリックメソッドを定義し、このパブリックメソッドでアクセスして変更するという2番目の方法で変更します。

classPerson(object):
 
 def __init__(self):
 self.name ="シャオミン"
 self.__age =20
 
 # プライベートプロパティの値を取得します
 def get_age(self):return self.__age
 
 # プライベートプロパティの値を設定します
 def set_age(self, new_age):
 self.__age = new_age
 
 
# オブジェクトを定義する
p =Person()
# 私有財産を強制的に取得する
# すべてを擁護することは意識に依存します
print(p._Person__age)print(p.name)
# クラス外のオブジェクトのプロパティを取得したい
ret = p.get_age()print(ret)
 
# クラス外のオブジェクトのプライベートプロパティの値を変更したい
p.set_age(30)print(p.get_age())

上記のPythonでのプライベート属性の定義は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。

Recommended Posts

Pythonでプライベート属性を定義する方法
pythonコードでラップする方法
Pythonで括弧を省略する方法
pythonでクラスを書く方法
pythonで数値をフィルタリングする方法
PythonでExcelを読む方法
pythonでエラーを表示する方法
pythonでreturnを書く方法
Pythonで変数を理解する方法
pythonで変数をクリアする方法
PythonでSQLiteを使用する方法
およびおよびまたはPythonでの使用方法
pythonでキャッシュファイルを削除する方法
Pythonでサードパーティモジュールを導入する方法
pythonでnull値を表す方法
pythonでテキストファイルを保存する方法
pythonでid関数を実行する方法
Pythonでサードパーティモジュールをインストールする方法
pythonでエラーをカスタムキャッチする方法
pythonでtryステートメントを書く方法
Pythonでカスタムモジュールを追加する方法
Pythonでグローバル変数を理解する方法
インストールされているモジュールをpythonで表示する方法
さまざまなシステムでのPythonopenメソッド
pythonで辞書を並べ替える方法
pythonで背景音楽を追加する方法
pythonで相対パスを表す方法
pythonでround関数を使用する方法
Pythonでzip関数を使用する方法
Pythonのインターフェースに基づいてプログラミングする方法
ubuntuサーバー環境にpythonをインストールする方法
Pythonゲームで重力をシミュレートする方法
pythonでformat関数を使用する方法
pythonでアシスタントを実行するコードを使用する方法
pythonでコード自動プロンプトを設定する方法
pythonでゲームを書く方法を教えてください
pythonでファイルとディレクトリを削除する方法
ダウンロードしたモジュールをpythonでインストールする方法
告白プログラムをpythonで書く方法
pythonで連続乗算計算を実行する方法
pythonコードにコメントする方法
pythonをすばやく学ぶ方法
pythonプラグインをアンインストールする方法
Pythonでのパッケージの導入を理解する方法
pythonで番号のリストを理解する方法
pythonで写真を自動的にダウンロードする方法の例
IEを添付ファイルとしてPythonで保存する方法
pythonオブジェクトを理解する方法
パイソンタプルの使い方
Ubuntu14.04でPython仮想環境を作成する方法
pythonで円の領域を見つける方法
あなたはまだパイソンでケーキを描く方法を知っていますか? ? ?
UbuntuにHelmをインストールする方法
pythonウェブページコードの表示方法
ubuntuでhanlpを使用する方法
pythonスレッドプールの使用方法
python設定ファイルの書き方
CentOSにPHP7.4をインストールする方法
pythonプログラムを保存する方法
Ubuntu14.04にmysqlをインストールする方法
CentOS8にPython3.8をインストールする方法