zoukankan      html  css  js  c++  java
  • 4.15作业

    作业:

    (不会写,看能不能抄明白.....

    1、在元类中控制把自定义类的数据属性都变成大写

    class Metaclass(type):
        def __new__(cls, class_name,bases_class_name,attribute_dict):
            update_dict={}
            for k,v in attribute_dict.items():
                if not callable(v) and not k.startswith('__'):
                    update_dict[k.upper()]=v
                else:
                    update_dict[k]=v
            return type.__new__(cls,class_name,bases_class_name,update_dict)
    
    class Teacher(metaclass=Metaclass):
        hobby="Say you're the worst student I've ever brought"
        dream='Engineer of human soul'
        def say_job(self):
            print(f'my job is {self.name}')
    
    print(Teacher.__dict__)
    

    2、在元类中控制自定义的类无需__init__方法

    # 2.要求实例化时传参必须为关键字形式,否则抛出异常TypeError: must use keyword argument
    #
    # 3.key作为用户自定义类产生对象的属性,且所有属性变成大写
    # 3、在元类中控制自定义的类产生的对象相关的属性全部为隐藏属性
    
    class Metaclass(type):
        def __call__(self, *args, **kwargs):
            if args:
               raise TypeError('必须传入关键字参数')
            obj=object.__new__(self)
            for k,v in kwargs.items():
                obj.__dict__[k.upper()]=v
            return obj
    class Teacher(metaclass=Metaclass):
        hobby="Say you're the worst student I've ever brought"
        dream='Engineer of human soul'
        def say_job(self):
            pass
    
    p=Teacher(name='tom',age=18,sex='male')
    print(p.__dict__)
    # {'NAME': 'tom', 'AGE': 18, 'SEX': 'male'}
    

    3、在元类中控制自定义的类产生的对象相关的属性全部为隐藏属性

    class Metaclass(type):
        def __init__(self, class_name, bases_class_name, attribute_dict):
            super().__init__(class_name, bases_class_name, attribute_dict)
    
        def __call__(self, *args, **kwargs):
            obj = self.__new__(self)
            self.__init__(obj, *args, **kwargs)
            obj.__dict__ = {'_%s__%s' % (self.__name__, k): v for k, v in obj.__dict__.items()}
            return obj
    
    
    class Foo(object, metaclass=Metaclass):
        def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender
    
    
    obj = Foo('tom', 18, 'male')
    print(obj.__dict__)
    #{'_Foo__name': 'tom', '_Foo__age': 18, '_Foo__gender': 'male'}
    
  • 相关阅读:
    python正则表达式
    pyperclip模块
    python画国旗
    linux6.5禁用telnet
    限制用户su到root
    按系统日期生成目录
    微软windows logo配色rgb
    fastclick使用与 fastclick ios11.3相关bug原因(ios输入框点击变得不灵敏,ios input失焦后,页面上移,点击不了)
    vue iframe嵌套页面高度自适应 (ios 宽度扩大的bug , ios展示比例问题)
    iOS设备 微信h5页面回退 内容不刷新的问题
  • 原文地址:https://www.cnblogs.com/zhangtieshan/p/12709611.html
Copyright © 2011-2022 走看看