この記事では、Python のアクセス制限がプライベートかパブリックかについて紹介します (例付き)。一定の参考値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
モジュールでは、多くの関数と変数を定義することがあります。しかし、一部の関数と変数は他の人が使用できるようにする必要があり、また一部の関数と変数はモジュール内でのみ使用できるようにする必要があるので、?
関数と変数がパブリックかプライベートかを定義することで、この目標を達成できます。
Python では、これはアンダースコア「_」プレフィックスによって実現されます。
パブリック: パブリック。通常の関数名や変数名はこのタイプであり、直接参照できます。たとえば、変数 abc、PI など;
特殊変数: 形式は __xxx__ で、__ で始まり __ で終わります。直接参照できますが、特殊な用途があります。たとえば、__author__ と __name__ は特殊変数です。一般に、自分で定義する変数にはこのタイプの変数名を使用しないでください。
private: プライベート、非公開、__xxx_ および __xxx に似た形式 (__num など)。
は直接参照しないでください。内部からのみアクセス可能であり、外部からはアクセスできません。
オブジェクトの内部状態は自由に変更できないため、アクセス制限の保護によりコードはより堅牢になります。
Class クラス内には属性とメソッドを含めることができます。外部コードは、インスタンス変数メソッドを直接呼び出して、内部の複雑なロジックを隠すことによってデータを操作できます。ただし、外部コードは依然としてインスタンスのプロパティを自由に変更できます。例:
>>>b.score 99 >>>b.score = 59 >>>b.score 59
内部属性が外部からアクセスされないようにするには、次のように属性名の前に 2 つのアンダースコア「__」を追加してプライベート変数に変換します。
class Student(object): def __init__(self, name, score): self.__name = name self.__score = score def print_score(self): print('%s: %s' % (self.__name, self.__score))
>>> bart = Student('Bart Simpson', 98) >>> bart.__name # 私有变量:不能被外部访问 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'Student' object has no attribute '__name'
属性を取得するメソッドを Student クラスに追加します: get_name() および get_score() (次のように):
class Student(object): ... def get_name(self): return self.__name def get_score(self): return self.__score
set_score():
... def set_score(self, score): # 避免传入无效参数 if 0 <= score <= 100: self.__score = score else: raise ValueError('bad score')
Python インタープリターは外部で __name 変数を _Student__name に変更するため、__name に直接アクセスすることはできませんが、それでも _Student__name を通じて __name 変数にアクセスできます。
>>> bart = Student('Bart Simpson', 98) >>> bart.get_name() 'Bart Simpson' >>> bart.__name = 'New Name' # 给bart新增的__name变量 >>> bart.__name # !与class内部的__name变量不是一个变量! 'New Name' >>> bart.get_name() # get_name()内部返回self.__name (_Student__name) 'Bart Simpson'
例:
def _private_1 (name): return 'hello,%s ' % name def _private_2 (name): return 'hi , %s ' % name def greeting(name): if len(name) > 3: return _private_1 (name) else: return _private_2 (name)
これは、コードのカプセル化と抽象化の非常に便利な方法です。つまり、外部から参照する必要のないすべての関数はプライベートとして定義され、外部から参照する必要がある関数のみがパブリックとして定義されます。 。
class Student(object): def __init__(self, name, score): self.__name = name self.__score = score def print_score(self): print('%s: %s' % (self.__name, self.__score)) def get_name(self): return self.__name def get_score(self): return self.__score def set_score(self, score): # 避免传入无效参数 if 0 <= score <= 100: self.__score = score else: raise ValueError('bad score') def _private_1 (name): return 'hello,%s ' % name def _private_2 (name): return 'hi , %s ' % name def greeting(name): if len(name) > 3: return _private_1 (name) else: return _private_2 (name)
以上がPython のアクセス制限がプライベートかパブリックかについての概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。