zoukankan      html  css  js  c++  java
  • Python编程之基础知识练习_009

    练习内容:使用两种方式实现字典访问属性化:用一个类包装字典,让这个字典不使用[]访问元素,使用.点号访问元素,如同属性一样访问。

    方式一:在__init__中直接操作实例字典

     1 __author__ = 'Orcsir'
     2 
     3 # 方式一
     4 class AttrDict:
     5     def __init__(self, attrs: dict):
     6         # 直接操作实例字典,避免使用魔术方法__setattr__
     7         self.__dict__.update(attrs)
     8 
     9     # 不允许修改属性
    10     def __setattr__(self, key, value):
    11         raise NotImplementedError
    12 
    13 
    14 # Test
    15 dct = {"x": 100, "y": 200}
    16 obj = AttrDict(dct)
    17 print(obj.x)
    18 obj.x = 900 # Error
    19 print(obj.x, obj.y)

    方式二: 使用metaclass

     1 __author__ = 'Orcsir'
     2 
     3 class AttrMeta(type):
     4     def __call__(self, dct):
     5         if dct == {}:
     6             raise ValueError("AttrDict need non empty dict")
     7         setattr(self, "__init__", lambda *args: None)
     8         obj = super().__call__(dct)
     9         obj.__dict__.update(dct)
    10         setattr(self, "__setattr__", lambda *args: None)
    11         return obj
    12 
    13 
    14 class AttrDict(metaclass=AttrMeta): pass
    15 
    16 # Test
    17 dct = {"x": 100, "y": 200}
    18 obj = AttrDict(dct)
    19 print(obj.x)
    20 obj.y = 100000 # No affect
    21 print(obj.y) # keep the original value
  • 相关阅读:
    wxpython的安装

    拓扑排序
    树,二叉树,森林,三者的转换
    二叉树的遍历
    最短路径
    图的遍历
    图的最小生成树
    哈夫曼树的应用
    哈夫曼树
  • 原文地址:https://www.cnblogs.com/orcsir/p/9236609.html
Copyright © 2011-2022 走看看