クラスの属性

1. クラス内で属性を直接定義する

クラスの属性を定義する もちろん、最も簡単かつ直接的な方法は、クラス内で属性を定義することです。

class UserInfo(object):
    name='两点水'

2. コンストラクターで属性を定義する

名前は、オブジェクトの構築時に属性が定義されることを示しています。

class UserInfo(object):
    def __init__(self,name):
        self.name=name

3. 属性アクセス制御

Java には、プロパティへのアクセスを制御できるパブリック (パブリック) プロパティとプライベート (プライベート) プロパティがあります。では、Python には属性アクセス制御はあるのでしょうか?

通常、2 つのアンダースコアで始まる __private_attrs を使用して、属性がプライベートであり、クラス外で使用したり直接アクセスしたりできないことを宣言します。クラス内のメソッドで self.__private_attrs を使用する場合。

なぜ通常の状況ではそうしか言えないのでしょうか?なぜなら、実はPythonにはプライベート属性などの機能が用意されていないからです。ただし、Python の属性のアクセス制御はプログラマの意識に依存します。なぜそんなことを言うのですか?次の例を見てください:

2b7f8cc7d68ea31db222e5ad19ad696.png

図をよく見てください。なぜ二重下線は実際のプライベート属性ではないと言えるのでしょうか?次の例を見て、次の例を使用して検証してみましょう:

#!/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('两点水', 23, 347073565);
    # 打印所有属性
    print(dir(userInfo))
    # 打印构造函数中的属性
    print(userInfo.__dict__)
    print(userInfo.get_account())
    # 用于验证双下划线是否是真正的私有属性
    print(userInfo._UserInfo__account)

出力結果は次のようになります:

c8042ea045950ea6cab0606f2de1873.png

学び続ける
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜