クラスの屬性
1. クラス內(nèi)で屬性を直接定義する
クラスの屬性を定義する もちろん、最も簡(jiǎn)単かつ直接的な方法は、クラス內(nèi)で屬性を定義することです。
class UserInfo(object): name='兩點(diǎn)水'
2. コンストラクターで屬性を定義する
名前は、オブジェクトの構(gòu)築時(shí)に屬性が定義されることを示しています。
class UserInfo(object): def __init__(self,name): self.name=name
3. 屬性アクセス制御
Java には、プロパティへのアクセスを制御できるパブリック (パブリック) プロパティとプライベート (プライベート) プロパティがあります。では、Python には屬性アクセス制御はあるのでしょうか?
通常、2 つのアンダースコアで始まる __private_attrs を使用して、屬性がプライベートであり、クラス外で使用したり直接アクセスしたりできないことを宣言します。クラス內(nèi)のメソッドで self.__private_attrs を使用する場(chǎng)合。
なぜ通常の狀況ではそうしか言えないのでしょうか?なぜなら、実はPythonにはプライベート屬性などの機(jī)能が用意されていないからです。ただし、Python の屬性のアクセス制御はプログラマの意識(shí)に依存します。なぜそんなことを言うのですか?次の例を見てください:
図をよく見てください。なぜ二重下線は実際のプライベート屬性ではないと言えるのでしょうか?次の例を見て、次の例を使用して検証してみましょう:
#!/usr/bin/env python # -*- coding: UTF-8 -*- class UserInfo(object): def __init__(self, name, age, account): self.name = name self._age = age self.__account = account def get_account(self): return self.__account if __name__ == '__main__': userInfo = UserInfo('兩點(diǎn)水', 23, 347073565); # 打印所有屬性 print(dir(userInfo)) # 打印構(gòu)造函數(shù)中的屬性 print(userInfo.__dict__) print(userInfo.get_account()) # 用于驗(yàn)證雙下劃線是否是真正的私有屬性 print(userInfo._UserInfo__account)
出力結(jié)果は次のようになります: