Pythonマジックメソッドのトピック

_ del_

クラスのデストラクタメソッド。オブジェクトがリサイクルされるときに実行され、主な機能はリソース(メモリファイルプロセスなど)を解放することです。

Pythonのメモリリサイクルメカニズムのため、Pythonのdelメソッドの実行時間は不確実であるため、Pythonでdestructorメソッドを使用することはお勧めしません。

classBar(object):
 def __del__(self):print("リサイクルされました! 〜")

a =Bar()

a.__del__() #参照カウントがゼロではなく、リソースgcが再利用されないため、アクティブな呼び出しは役に立ちません。
print("Aが削除されました")print(a)

del a
# print(a)

_ dict_

_ slots_

classBar(object):
 __ slots__ =('name','gender')

 def __init__(self, name='monkey'):
 self.name = name
 self.gender ='male'

a =Bar()
a.age =18  #プロパティを動的に追加すると、エラーが報告されます。
print(a.name)

_ str_

strタイプを返す必要があります。オブジェクトを印刷すると、デフォルトのself.strの代わりに返されたstrが出力されます。
: return: <main…. object at 0x1084b7208

classBar(object):

 def __str__(self):return"Bar"

a =Bar()print(a) # Bar

_ repr_

オブジェクトを通訳者にわかりやすい形式に変換します。これはeval()メソッドと密接に関連しています。通常、repr()はオブジェクトの__repr__メソッドを呼び出します。このメソッドは、通訳者にわかりやすいオブジェクトの説明を文字列形式で返します。eval( )repr()の戻り値を元のオブジェクトに変換できます。

これは非常に強力です。これは多態性の最も直接的な現れです。ほとんどすべてのクラスオブジェクトがそれを実装しますが、それぞれの戻り結果は異なります。

_ class_

_ class_を使用すると、クラスのメソッドを呼び出し、オブジェクトを介してクラスの属性を操作できます。つまり、object .__ class__はこのオブジェクトのクラスを取得できます。
クラスを取得した後、クラスのプロパティに対して新しいインスタンス化操作を実行し、クラスのメソッドを呼び出すことができます。

classBar(object):
 name ='monkey'

a =Bar()print(a.__class__.name)  #インスタンス化されたオブジェクトを介したクラスへのアクセスを許可する

_ doc_

オブジェクト、クラス、またはメソッドのdocstringを出力します

classBar(object):"""
 A simple show class!"""
 name ='monkey'

 def get_name(self):"""
 getclassargument name
    """
 return self.__class__.name

a =Bar()print(a.__class__.__doc__)print(a.__class__.get_name.__doc__)

# A simple show class!
#  
#
# getclassargument name

_ base_

クラスの親クラスを返すために使用されます

_ bases_

クラスの継承リストを返すために使用されます

classLady(object):""" """classSmall(object):""" """classSmallLady(Small, Lady):""""""print(Lady.__base__)  # <class'object'print(SmallLady.__bases__)  # (<class'__main__.Small',<class'__main__.Lady')

_ iter_

反復可能なオブジェクトを返す必要があります

このオブジェクトは、__ next__メソッドを実装する必要があります。

_ next_

反復子または反復例外の次の値が返され、反復が終了するたび。

_ len_

反復子または反復例外の次の値が返され、反復が終了するたび。

classListMeta(type):
 def __call__(self, data,*args,**kwargs):  #自己、つまりインスタンス化されたクラス、呼び出し可能なリストを作成します()ここで、selfは、インスタンス化されるクラス自体を指します
 self.__init__(self,data)return self

 def __str__(self):
 result = self.clean_data(self) #オブジェクトを人間にわかりやすい文字列に変換するために必要なリスト形式を返すことができるのはリストです
 result ='[{}]'.format(result[:-1])return result

 def __repr__(self):return'List({})'.format(self.__str__())  #通訳に適した文字列に変換

 def __iter__(self):		#イテレータープロトコルを実装するオブジェクトを返します
 return self #それは実装します__next__

 def __next__(self):		#イテレータープロトコルを実装します。次の値を返すか、イテレーションがイテレーションを異常終了するたびに
 if self.index  =len(self.data):  
  raise StopIteration
 else:
  value = self.data[self.index]
  self.index +=1return value

 def __len__(self):  #オブジェクトの長さlenを返します()関数はオブジェクトを実行します__len__方法
 return self.len

classList(metaclass=ListMeta):

 def __init__(self, data):
 self.data = data
 self.index =0
 self.len =len(self.data)
    

l =List([1,2,3,4,5,6,7])print(l)print(len(l))for i in l:print(i)

_ hash_

intタイプのデータを返す必要があり、このオブジェクトを一意に表すことができます。これは非常に重要です。

_ getattribute_

_ getattr_

_ setattr_

ポイント属性名の形式で属性を設定すると、_setattr_メソッドが呼び出されます。このメソッドは、属性名と属性値の間の対応する関係を関係辞書__dict__に書き込む必要があります。このメソッドをオーバーライドする場合は、オブジェクト属性ディクショナリを手動で更新することを忘れないでください。

classStorage(object):

 def __init__(self, name):
 self.name = name  #転送__setattr__方法

 def __getattribute__(self, item):  #各属性にアクセスする前に、このメソッドを呼び出します
 print('getattribute: %s'% item)
 ret = True
 if item =='error':
  raise AttributeError(r'Error ~ "error"')  #エラーが報告された場合でも実行されます〜
 else:
  ret = object.__getattribute__(self, item)return ret

 def __getattr__(self, item):print('getattr: %s'% item)try:return self.__dict__[item]except(IndexError, KeyError)as e:print('No attribute %s '% e)return'%s is error'% item

 def __setattr__(self, key, value):print('setattr: %s '% key)
 self.__dict__.update({key:value})

file =Storage('file')
name = file.error  #転送__getattr__方法
# setattr: name 
# getattribute: __dict__
# getattribute: error
# getattr: error
# getattribute: __dict__
# No attribute 'error'

上記は、Pythonマジックメソッドのトピックの詳細な内容です。Pythonマジックメソッドの詳細については、ZaLou.Cnの他の関連記事に注意してください。

Recommended Posts

Pythonマジックメソッドのトピック
Pythonオブジェクト指向の魔法の方法
Python3.7デバッグサンプルメソッド
Python関数-辞書get()メソッド
Pythonエラー処理方法
パイソンブラックマジックメタクラス
Pythonは関数メソッドを定義します
PythonTCPパケットインジェクション方式
Python描画リンググラフ法
情報メソッドを除くPython追跡
Pythonマジック関数eval()学習
Pythonで一般的に使用される魔法の方法
Pythonは勾配降下法を実装しています
Pythonの右揃えの例の方法
パラメータを渡すPythonメソッド
Python算術シーケンス計算方法
pythonフォントを増やす方法の手順
Pythonの対数法の要約
Pythonとjsのインタラクティブな呼び出しメソッド
魔法の方法とPythonの使用
Pythonは最も急な降下方法を実装します
pythonを実行するメソッドを終了します
pythonにdjangoモジュールをインストールする方法
pythonは勾配メソッドを実装しますpython最速の降下メソッド
pythonインスタンス化オブジェクトの特定のメソッド
不可欠な例を見つけるためのPythonRombergメソッド
pythonからsqlを読み取る方法の例
音楽ファイルを開くためのPythonのサンプルメソッド
pythonインポートライブラリの特定の方法
Python置換ピップソースメソッドプロセス分析