Pythonオブジェクト向け(二)などのパッケージ

15137 ワード

パッケージの理解
パッケージ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()) 
    

    王さんと張さん

  • クラスの保存属性
  • Pythonインタプリタによって予約されたクラス属性は、二重下線で始まり、終わります.
  • は特殊属性とも呼ばれ、Special Attributes
  • 特徴:二重下線の先頭と末尾
  • の役割:Pythonクラスを理解するために統一的な属性インタフェース
  • を提供する.
  • 属性値:特定の意味を持ち、クラス定義後に
  • を直接使用する
  • アクセス予約属性のみ
  • __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’>

    クラスの保存方法
  • 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以上の保存方法があり、一般的な保存方法です.