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
  • 相关阅读:
    ios app相互调用
    Nginx连接频率限制
    nginx 基于域名的虚拟主机
    nginx基于多端口的虚拟主机
    Nginx基于多ip的虚拟主机
    多文件上传
    thinkphp5模型关联
    原生查询和查询构造器
    thinkphp5请求和响应
    thinkphp验证器
  • 原文地址:https://www.cnblogs.com/orcsir/p/9044195.html
Copyright © 2011-2022 走看看