094組み込みメソッド

組み込みメソッド

  1. オブジェクトがインスタンス化されたときに__init__自動的に呼び出されます

  2. __str_ :あなたは__str書き換えていない場合は書き換えられた場合_印刷印刷は、メモリアドレスをプリントアウトします、それはあなたが望むものをプリントアウトします
  3. __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

おすすめ

転載: www.cnblogs.com/xichenHome/p/11448722.html