python类的内置方法

1.python 类的内置方法

1.__new__:    在__init__触发前自动触发

2.__init__: 在调用类产生对象时触发

3.__getattr__: 在使用“对象.属性” 获取属性,属性不存在时,自动触发

4.__getattribute__: 在使用‘对象.属性’获取属性,无论属性有没有,都会自动触发

5.__setattr__: 在使用“对象.属性 = 属性值”,添加或修改属性值时触发

6.__call__: 在使用 “对象 +()” 时,触发

7.__str__: 在打印对象时触发

8.__getitem__: 在通过 对象[key] 获取对象属性时触发

9.__setitem__: 在通过 对象[key] = value 设置属性值时触发

10.__del__: 删除对象时触发(del obj),或者python解释器运行完py文件 回收(删除)对象时触发

实例:

class Demo(object):
    # 条件:__new__:在__init__触发之前,自动触发触发
    def __new__(cls, *args, **kwargs):  # 这里相当于重写了__new__的方法
        print('此处__new__方法的执行')
        return object.__new__(cls, *args, **kwargs)

    def __init__(self):
        print("此处__init__方法的执行")

    # demo_obj = Demo()

    # 条件:在在 “对象.属性” 获取属性时,若 “属性没有” 时触发。
    def __getattr__(self, item):
        print('此处__getattr__方法的执行')
        print(item)

    # demo_obj = Demo()
    # print(demo_obj.__dict__)

    # 注意: 只要__getattr__ 与 __getattribute__ 同时存在类的内部,只会触发__getattribute__。
    # 条件: __getattribute__: 在 “对象.属性” 获取属性时,无论"属性有没有"都会触发
    def __getattribute__(self, item):
        print("此处是__getatribute__的执行")

        # return object.__getattribute__(self, item)

    # demo_obj = Demo()
    # demo_obj.x()

    # 条件: 当 “对象.属性 = 属性值” , 添加或修改属性时触发
    def __setattr__(self, key, value):
        print("此处是__setattr__的执行")
        print(key, value)

    # demo_obj = Demo()
    # demo_obj.x = 10

    # 条件: 在调用对象 “对象 + ()” 时触发。
    def __call__(self, *args, **kwargs):
        print("此处是__call__的执行")

    # demo_obj = Demo()
    # demo_obj()

    # 条件: 在打印"对象"时触发。
    # 注意: 该方法必须要有一个 “字符串” 返回值
    def __str__(self):
        print("此处是__str__的执行")
        return '111'

    # demo_obj = Demo()
    # # print(demo_obj)

    # 在对象通过 “对象[key]” 获取属性时触发。
    def __getitem__(self, item):
        print("此处是__getitem__的执行")

    # demo_obj = Demo()
    # print(demo_obj['x'])

    # 在对象通过 “对象[key]=value值” 设置属性时触发
    def __setitem__(self, key, value):
        print('此处是__setitem__方法的执行')


demo_obj = Demo()
demo_obj['x'] = 111
print(demo_obj.x)

 

posted @ 2019-11-29 23:49  躺云飘  阅读(303)  评论(0编辑  收藏  举报