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

    练习内容:
    模拟property描述器。

    1.实现一个类,模拟property数据描述器

     1 class Property:
     2     def __init__(self, get_attrib_func):
     3         self.get_attrib_func = get_attrib_func
     4         self.set_attrib_func = None
     5 
     6     def __set__(self, instance, value):
     7         if not self.set_attrib_func:
     8             raise AttributeError("can't set attribute")
     9         self.set_attrib_func(instance, value)
    10 
    11     def __get__(self, instance, owner):
    12         return self.get_attrib_func(instance)
    13 
    14     def setter(self, set_attrib_func):
    15         self.set_attrib_func = set_attrib_func
    16         return self

    2.简单的测试代码

     1 class Person:
     2     def __init__(self, name, age):
     3         self._name = name
     4         self._age = age
     5 
     6     @Property  # name = Property(name)
     7     def name(self):
     8         return self._name
     9 
    10     @name.setter  # name = Property(name).setter(name)
    11     def name(self, name):
    12         self._name = name
    13 
    14     @Property  # age = Property(age)
    15     def age(self):
    16         return self._age
    17 
    18     # @age.setter  # age = Property(age).setter(age)
    19     # def age(self, age):
    20     #     self._age = age
    21 
    22     def __str__(self):
    23         return "<Person:{}:{}>".format(self._name, self._age)
    24 
    25     __repr__ = __str__
    26 
    27 if __name__  == "__main__":
    28     p = Person("tom", 19)
    29     print(type(p.name), type(p.age))
    30     p.name = "jerry"  # OK
    31     print("~" * 100)
    32     p.age = 200  # AttributeError: can't set attribute
  • 相关阅读:
    xml序列化
    C#.NET对象深拷贝
    C++的函数传参
    hubilder热更新
    qrcode加背景图
    js点击屏幕出现文字
    JS实现搜索匹配功能
    FiraCode字体(好看的字体)
    基于PHP和JS的AES相互加密解密方法详解(CryptoJS)
    常见的正则匹配
  • 原文地址:https://www.cnblogs.com/orcsir/p/9044195.html
Copyright © 2011-2022 走看看