zoukankan      html  css  js  c++  java
  • 双下划线开头的attr方法

    # class Foo:
    #     x=1
    #     def __init__(self,y):
    #         self.y=y
    #
    #     def __getattr__(self, item):
    #         print('执行__getattr__')
    #
    # f1=Foo(10)
    # print(f1.y)
    # print(getattr(f1,'y'))   #len(str)--->str.__len__()
    # f1.sssssssssssssssssssssssssssssssssssss
    
    
    # class Foo:
    #     x=1
    #     def __init__(self,y):
    #         self.y=y
    #
    #     def __delattr__(self, item):
    #         print('删除操作__delattr__')
    #
    # f1=Foo(10)
    # del f1.y
    # del f1.x
    
    #
    # class Foo:
    #     x=1
    #     def __init__(self,y):
    #         self.y=y
    #
    #     def __setattr__(self, key, value):
    #         print('__setattr__执行')
    #         # self.key=value
    #         self.__dict__[key]=value
    # f1=Foo(10)
    # print(f1.__dict__)
    # f1.z=2
    # print(f1.__dict__)
    # class Foo:
    #     def __getattr__(self, item):
    #         print('------------->')
    #
    # # print(Foo.__dict__)
    # print(dir(Foo))
    # f1=Foo()
    #
    # print(f1.x)  #只有在属性不存在时,会自动触发__getattr__
    #
    # del f1.x #删除属性时会触发_delattr__
    #
    # f1.y=10
    # f1.x=3  # 设置属性的时候会触发——setattr———
    
    
    
    
    
    
    
    
    class Foo:
        def __init__(self,name):
            self.name=name
        def __getattr__(self, item):
            print('你找的属性【%s】不存在' %item)
        def __setattr__(self, k,v):
            print('执行setattr',k,v)
            if type(v) is str:
                print('开始设置')
                # self.k=v #触发__setattr__
                self.__dict__[k]=v.upper()
            else:
                print('必须是字符串类型')
        def __delattr__(self, item):
            print('不允许删除属性【%s】' %item)
            # print('执行delattr',item)
            # del self.item
            # self.__dict__.pop(item)
    
    f1=Foo('alex')
    # f1.age=18 #触发__setattr__
    # print(f1.__dict__)
    # print(f1.name)
    # print(f1.age)
    # print(f1.gender)
    # print(f1.slary)
    print(f1.__dict__)
    del f1.name
    print(f1.__dict__)
  • 相关阅读:
    Django 支付宝付款接口的使用
    Django 处理跨域的配置、前台处理ajax
    pip安装源
    Django 缓存机制
    Django 配置使用日志
    Celery框架的基本使用方法
    python 虚拟环境的搭建
    Django 后台管理xadmin
    Python学习之路_day_16(模块搜索路径,开发规范)
    Python学习之路_day_15(模块)
  • 原文地址:https://www.cnblogs.com/jiawen010/p/10118056.html
Copyright © 2011-2022 走看看