_ 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