• 元类练习题


    练习一:在元类中控制把自定义类的数据属性都变成大写

    class Mymetaclass(type):
        def __new__(cls, name, bases, attrs):
            update_attrs={}
            for k,v in attrs.items():
                if not callable(v) and not k.startswith('__'):
                    update_attrs[k.upper()] = v
                else:
                    update_attrs[k]=v
            return type.__new__(cls, name, bases, update_attrs)
    
    class Chinese(metaclass=Mymetaclass):
        country = 'China'
        tag = 'Legend of the Dragon'
        def walk(self):
            print('%s is walking' %self.name)
    
    print(Chinese.__dict__)
    """
    {'__module__': '__main__',
     'COUNTRY': 'China', 
     'TAG': 'Legend of the Dragon',
     'walk': <function Chinese.walk at 0x1040211e0>,
     '__dict__': <attribute '__dict__' of 'Chinese' objects>, 
     '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, 
     '__doc__': None}
    """

    练习二:在元类中控制自定义的类无需init方法

    1.元类帮其完成创建对象,以及初始化操作;

    2.要求实例化时传参必须为关键字形式,否则抛出异常TypeError: must use keyword argument

    3.key作为用户自定义类产生对象的属性,且所有属性变成大写

    class Mymetaclass(type):
    
        def __call__(self, *args, **kwargs):
            if args:
                raise TypeError('must use keyword argument for key function')
            obj = object.__new__(self)  # 创建对象,self为类Foo
    
            for k,v in kwargs.items():
                obj.__dict__[k.upper()] = v
            return obj
    
    
    class Chinese(metaclass=Mymetaclass):
        country = 'China'            # 需要大写的数据属性
        tag = 'Legend of the Dragon'
        def walk(self):
            print('%s is walking' %self.name)
    
    p=Chinese(name='Jack', age=18, sex='male')
    print(Chinese.__dict__)
    """
    {'__module__': '__main__', 
    'country': 'China', 
    'tag': 'Legend of the Dragon', 
    'walk': <function Chinese.walk at 0x1040211e0>, 
    '__dict__': <attribute '__dict__' of 'Chinese' objects>, 
    '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, 
    '__doc__': None}
    """
  • 相关阅读:
    python爬虫中遇到的问题以及解决方法
    python爬虫中涉及json数据的处理
    python——selenium库的使用
    python数据可视化(一)——绘制随机漫步图
    Python练习题——用列表的方法输出杨辉三角
    python——使用xlwing库进行Excel操作
    DesignPattern_Java:Factory Method Pattern
    eclipse导出可执行的jar包
    DesignPattern_Java:SingletonPattern
    DesignPattern_Java:设计模式分类和设计原则
  • 原文地址:https://www.cnblogs.com/xiugeng/p/8944780.html
Copyright © 2020-2023  润新知