Pythonオブジェクト向け(二)などのパッケージ
15137 ワード
パッケージの理解
パッケージEncapsulation:属性とメソッドの抽象属性の抽象:クラスの属性(変数)を定義、隔離、保護する メソッドの抽象:クラスのメソッド(関数)を定義、分離、および保護する の目的は、対外的に動作可能な属性および方法のクラスを形成するインタフェース である.プロパティ プライベート属性:クラス内でのみ にアクセスできます.公開プロパティ:クラス/オブジェクト名で にアクセスできます.
メソッド プライベートメソッド:クラス内でのみ を使用できます.公開方法: にクラス/オブジェクト名でアクセス可能
プライベートクラス属性現在のクラスがアクセスできるクラス属性のみで、サブクラスも は、クラス内でのみメソッドによってアクセスできる である.は通過できない.または.方式アクセス 属性メンテナンスの制御性を有効に保証する
2 AttributeError:type object '‘DemoClass’ has no attribute ‘__count’
プライベートインスタンス属性は、現在のクラスの内部アクセスのためのインスタンス属性のみであり、サブクラスも にアクセスできません.
区別:プライベート属性名には2つの下線(_)が必要です.__のようにnameは、クラス内でのみメソッドによってアクセスできる である.は通過できない.または.方式アクセス 属性メンテナンスの制御性を有効に保証する
老王老李AttributeError:‘DemoClass’object has no attribute'_name
プライベートメソッドクラス内で定義され、使用される関数
王さんと張さん
クラスの保存属性 Pythonインタプリタによって予約されたクラス属性は、二重下線で始まり、終わります. は特殊属性とも呼ばれ、Special Attributes 特徴:二重下線の先頭と末尾 の役割:Pythonクラスを理解するために統一的な属性インタフェース を提供する.属性値:特定の意味を持ち、クラス定義後に を直接使用する
アクセス予約属性のみ を区切る
DemoClass DemoClass (,) である. である. . を継承できません.
A Demo Class
クラスの保存方法 Pythonインタプリタによって予約されたクラスメソッド. は特殊な方法、Special Methods とも呼ばれています.特徴:二重下線の先頭と末尾 の役割:Pythonクラスを操作するために統一的な方法インタフェース を提供する.メソッドロジック:特定の意味を持ち、一般的にオペレータに関連付けられ、クラス定義には のリロードが必要です.
一般的な保存方法:ベースカテゴリ 保存方法
対応アクション
説明
obj.__init__()
obj=ClassName()
インスタンスオブジェクトの関数ロジックの初期化
obj.__del__()
del obj
インスタンスオブジェクトの関数ロジックの削除
obj.__repr__()
repr(obj)
オブジェクトの印刷可能文字列を定義する関数ロジック
obj.__str__()
str(obj)
オブジェクト文字列変換操作を定義する関数ロジック
obj.__len__()
len(obj)
オブジェクト長操作を定義する関数ロジック
obj.__reversed__()
obj.reversed()
オブジェクトの逆順序を定義する関数ロジック
obj.__abs__()
abs(obj)
オブジェクトの絶対値操作を定義する関数ロジック
obj.__int__()
int(obj)
オブジェクトの整数変換を定義する関数ロジック
obj.__lt__()obj.__le__()obj.__eq__()obj.__ne__()obj.__gt__()obj.__ge__()
obj1 < obj2obj1 <= obj2obj1 == obj2obj1 != obj2obj1 > obj2obj1 >= obj2
オブジェクト間比較操作の保持方法
Pythonクラスには100以上の保存方法があり、一般的な保存方法です.
パッケージEncapsulation:属性とメソッドの抽象
プライベートクラス属性
class < >:
< > = < >
def __init__(self, < >)
...
にアクセスできません.プライベートクラス属性名には2つの下線()が必要です.__のようにcount class DemoClass:
__count = 0
def __init__(self, name):
self.name = name
DemoClass.__count += 1
@classmethod
def getCount(cls):
return DemoClass.__count
dc1 = DemoClass(' ')
dc2 = DemoClass(' ')
print(DemoClass.getCount())
print(DemoClass.__count)
2 AttributeError:type object '‘DemoClass’ has no attribute ‘__count’
プライベートインスタンス属性
class < >:
< > = < >
def __init__(self, < >)
self.< > = < >
...
区別:プライベート属性名には2つの下線(_)が必要です.__のようにname
class DemoClass:
def __init__(self, name):
self.__name = name
def getName(self):
return self.__name
dc1 = DemoClass(" ")
dc2 = DemoClass(" ")
print(dc1.getName(), dc2.getName())
print(dc1.__name, dc2.__name)
老王老李AttributeError:‘DemoClass’object has no attribute'_name
二重下線法は変換規則にすぎず,変換後,クラス内の元の名前が変化し,これは形式的にプライベートである.Pythonの設計ロジックはプライベートを明確にサポートしていない.dc1._DemoClass__name
でプライベート属性にアクセスできます.プライベートメソッド
class < >:
def < >(self, < >)
...
プライベートメソッド名には、最初に2つの下線()が必要です.__のようにgetCount() class DemoClass:
def __init__(self, name):
self.__name = name
def __getName(self):
if self.__name != "":
return self.__name
else:
return " "
def printName(self):
return "{} ".format(self.__getName())
dc1 = DemoClass(" ")
dc2 = DemoClass("")
print(dc1.printName(), dc2.printName())
王さんと張さん
クラスの保存属性
__name__
:クラス名__qualname__
:以.モジュールグローバルネーミングスペースから始まるクラス名__bases__
:クラスが継承するベースクラス名class DemoClass:
"A Demo Class"
def __init__(self, name):
self.name = name
def getName(self):
return self.name
dc1 = DemoClass(" ")
print(DemoClass.__qualname__, DemoClass.__name__, DemoClass.__bases__)
DemoClass DemoClass (,)
.__dict__
クラスメンバー情報を含む辞書.keyは属性とメソッド名、valueはアドレス.__dict__
オブジェクト属性情報を含む辞書、keyは属性名、valueは値__class__
オブジェクトに対応するクラス情報、すなわちtype情報__doc__
クラス記述、クラス定義に書かれた最初の行の文字列は、__module__
クラスが存在するモジュールの名前class DemoClass:
"A Demo Class"
def __init__(self, name):
self.name = name
def getName(self):
return self.name
dc1 = DemoClass(" ")
print(DemoClass.__doc__, DemoClass.__module__, DemoClass.__class__)
print(dc1.__doc__, dc1.__module__, dc1.__class__)
A Demo Class
__main__
A Demo Class __main__
__main__.DemoClass’> クラスの保存方法
対応アクション
説明
obj.__init__()
obj=ClassName()
インスタンスオブジェクトの関数ロジックの初期化
obj.__del__()
del obj
インスタンスオブジェクトの関数ロジックの削除
obj.__repr__()
repr(obj)
オブジェクトの印刷可能文字列を定義する関数ロジック
obj.__str__()
str(obj)
オブジェクト文字列変換操作を定義する関数ロジック
obj.__len__()
len(obj)
オブジェクト長操作を定義する関数ロジック
obj.__reversed__()
obj.reversed()
オブジェクトの逆順序を定義する関数ロジック
obj.__abs__()
abs(obj)
オブジェクトの絶対値操作を定義する関数ロジック
obj.__int__()
int(obj)
オブジェクトの整数変換を定義する関数ロジック
obj.__lt__()obj.__le__()obj.__eq__()obj.__ne__()obj.__gt__()obj.__ge__()
obj1 < obj2obj1 <= obj2obj1 == obj2obj1 != obj2obj1 > obj2obj1 >= obj2
オブジェクト間比較操作の保持方法
Pythonクラスには100以上の保存方法があり、一般的な保存方法です.