組み込みメソッド
オブジェクトがインスタンス化されたときに__init__自動的に呼び出されます
- __str_ :あなたは__str書き換えていない場合は書き換えられた場合_印刷印刷は、メモリアドレスをプリントアウトします、それはあなたが望むものをプリントアウトします
__repr__ STRと同様の、直接__repr__を実行し、対話型のコマンドで変数名を書きます
__str__
1.不写__str__ class Foo: def __init__(self,name): self.name=name # def __str__(self): # return '['+self.name+']' f=Foo('nick') print(f.__str__())
< メイン 0x00000201444E77F0で.fooというオブジェクト>
2.写__str__ class Foo: def __init__(self,name): self.name=name def __str__(self): return '['+self.name+']' f=Foo('xichen') print(f.__str__())
[Xichen]
l=[1,2,3] # #本质也是调用list的__str__方法 print(l)
[1、2、3]
1 .__ setattr__
- その実行をトリガーする属性を変更/追加
- あなたがいずれかを取得するために、一度、オブジェクトに属性を割り当てる場合は、__setattr__に入ります
class Foo:
def __init__(self,name):
self.name=name
def __setattr__(self, key, value):
print('对象没有这个属性')
1.原来字典使用方式dict
dic = dict(name='xichen',age=18)
print(dic)
print(dic ['name'])
{ '名前': 'xichen'、 '年齢':} 18は
xichen
2.写一个类继承字典,让它可以 .取值,可以中括号取值
class Mydict(dict): # 继承dic这个类
def __init__(self,**kwargs):
super().__init__(**kwargs)
def __getattr__(self, item):
print(item)
return self[item]
def __setattr__(self, key, value):
self[key]=value
di=Mydict(name='xichen',age=18)
print(di['name'])
print(di.name)
di.sex='male'
di['sex']='male'
di.age=18
print(di.age)
xichen
xichen
18
2 .__ getattr__
- トリガーする場合にのみを使用の時点でプロパティを呼び出すと、プロパティが存在しません。
- あなたがいずれかを取得するために、一度、オブジェクトの属性を取得するために行く場合は、__getattr__に入ります
class Foo:
def __init__(self,name):
self.name=name
def __getattr__(self, item):
return '没有这个字段'
f = Foo('xichen')
print(f.age)
このフィールドなし
3 .__ delattr__
- とき、トリガプロパティを削除します。
- 属性がオブジェクトを削除した場合、__delattr__入力します
class Foo:
def __init__(self,name):
self.name=name
def __delattr__(self,item):
self.__dict__.pop(item)
print('删除成功')
del f.name
print(f.__dict__)
正常に削除
{ '年齢':18}
4 .__ item__シリーズ
- []内の値の割り当てによってオブジェクトは、コールの値を削除します
class Foo:
def __init__(self, name):
self.name = name
def __getitem__(self, item):
name=getattr(self,item)
# print(name)
# print(self.__dict__[item])
return name
# return self.__dict__[item]
def __setitem__(self, key, value):
print('obj[key]=lqz赋值时,执行我')
self.__dict__[key] = value
def __delitem__(self, key):
print('del obj[key]时,执行我')
self.__dict__.pop(key)
f=Foo('xichen')
print(f['name'])
xichen
- __setitem__
f['age'] = 18
print(f['age'])
print(f.__dict__)
I実行OBJ [キー] = lqz割り当て
18がある
18は、{: 'xichen'、 '年齢' '名称'}
- __delitem__
del f['age']
print(f.__dict__)
デルOBJ [キー]は、I行うと
{ 'xichen' '名' }
5 .__ call__:オブジェクトのブラケットは、それを呼び出します
class Foo:
def __call__(self):
print('调用我 !')
f=Foo()
f()
私を呼んで!
6 .__ enter__と__exit__
- 基本的に、コンテキストマネージャ
- 我々はそれが__enter__トリガされたときに開いてファイルを開くために使用するもの、ファイルを開くために私たちを助けています
- システムは、我々はトップグリッド書き込みが実際に__exit__トリガされていたことが検出された場合には、そう私たちは、自動的にリソースを解放するのに役立ち
with open('path','r') as f:
pass