內置方法

目錄python

內置方法

  1. __init__(完成對象的初始化)code

    class Foo:
        def __init__(self,name,pwd):
            self.name = name
            self.pwd = pwd
    p = Foo('name','pwd')
  2. _str__:若是不重寫_str__ print打印會打印出內存地址對象

    class Foo:
        def __init__(self,name,pwd):
            self.name = name
            self.pwd = pwd
    p = Foo('name','pwd')
    print(p.__str__())#<__main__.Foo object at 0x00000239F5C69BC8>
    class Foo:
        def __init__(self,name,pwd):
            self.name = name
            self.pwd = pwd
        def __str__(self):
            return self.name
    p = Foo('name','pwd')
    print(p.__str__())#name
    # #至關於上面那句
    print(p)#name

    小知識繼承

    l=[1,2,3]
    #本質也是調用list的__str__方法
    print(l)
  3. _repr__:跟str相似,在交互式命令下直接寫變量名,會執行_repr__內存

  4. __getattr__:#若是去對象中取屬性,一旦取不到,會進入到__getattr__get

  5. _selattr__:若是去對象中賦值屬性,一旦取不到,會進入到_selattr__it

  6. __delattr__:#若是刪除對象中的屬性,會進__delattr__class

    class Foo:
        def __init__(self,name):
            self.name = name
        def __getattr__(self, item):
            return 'getattr'
        def __set__(self, instance, value):
            return 'setattr'
        def __delattr__(self, item):
            return "delattr"
    f = Foo('nick')
    print(f.name)#nick
    
    print(f.age)#getattr,若是去對象中取屬性,一旦取不到,會進入到__getattr__
    
    print(f.__dict__)#{'name': 'nick'}
    
    print(f.name)#nick
    
    f.sex = 'male'
    print(f.__dict__)#{'name': 'nick', 'sex': 'male'}
    
    
    del f.name #刪除不掉,由於有delattr
    print(f.__dict__)#{'name': 'nick', 'sex': 'male'}

    原來字典使用方式變量

    di=dict(name='lqz',age=18)
    print(di)
    print(di['name'])
    print(di.name)
    di.sex='male'
    #

    寫一個類繼承字典,讓它能夠 . 取值,能夠中括號取值object

    class Mydict(dict):
        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='lqz',age=18)
    print(di['name'])
    print(di.name)
    di.sex='male'
    di['sex']='male'
    
    
    print(di['name'])
    print(di.name)
    di.sex=19
    print(di.sex)
    di['sex']='male'
    print(di.sex)

    __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('nick')
    print(f['name'])
    
    __call__   對象加括號會調用它
    class Foo:
        def __call__(self):
            print('xxxx')
    
    f=Foo()
    f()
class Mydict():
    def __getattr__(self, item):
        print('xxx')
        return '該屬性不存在'

m=Mydict()
print(m.name)
相關文章
相關標籤/搜索