美文网首页
python 创建可类型检查的类属性

python 创建可类型检查的类属性

作者: 孙广宁 | 来源:发表于2022-05-30 22:19 被阅读0次
8.9 可以以描述符类的形式定义其功能。
>>> class I:
...      def __init__(self,name):
...          self.name = name
...      def __get__(self,instance,cls):
...          if instance is None:
...              return self
...          else:
...             return instance.__dict__[self.name]
...      def __set__(self,instance,value):
...          if not isinstance(value,int):
...              raise TypeError("Expected an int")
...          instance.__dict__[self.name]=value
...      def __delete__(self,instance):
...          del instance.__dict__[self.name]
... 
>>> 
  • 所谓的描述符就是以特殊方法 get set delete 的形式实现了三个核心的属性访问操作的类。
  • 这些方法通过接受类实例作为输入来工作。之后,底层的实例字典会根据需要适当的进行调整
  • 要使用一个描述符,我们把描述符的实例放置在类的定义中作为类变量来用。
>>> class P:
...     x = I('x')
...     y = I('y')
...     def __init__(self,x,y):
...         self.x=x
...         self.y=y
... 
  • 当这么做时,所有针对描述符属性(即使 x或y)的访问都会给 get set和delete方法所捕获,如下:
>>> p =P(2,3)
>>> p.x
2
>>> p.y
3
>>> p.x=2.3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 11, in __set__
TypeError: Expected an int
>>> p.x=3
>>> p.x
3
>>> 

  • 每个描述符方法都会接受被操纵的实例作为输入。

相关文章

  • python 创建可类型检查的类属性

    8.9 可以以描述符类的形式定义其功能。 所谓的描述符就是以特殊方法 get set delete 的形式实现了三...

  • 反射

    java的动态机制,用于在运行期间检查对象的类型,检查对象的类结构,属性,方法,还可以动态加载类,动态创建对象,动...

  • 创建新的类或实例属性

    问题 你想创建一个新的拥有一些额外功能的实例属性类型,比如类型检查。 解决方案 如果你想创建一个全新的实例属性,可...

  • react native es6的部分写法

    创建类: 创建props类型 props设置默认属性

  • Interface 接口

    1. 基础定义 2. 额外的属性检查 3. 函数类型 4. 可索引的类型 5. 类类型 实现接口# TypeScr...

  • java基础类-6-反射

    常用类 获取类类型 创建对象 获取属性 获取特定属性 方法和构造方法

  • IO流小练习-System.in输入类名自动创建类

    练习要求: 自动创建有一个属性的类文件。通过控制台,获取类名,属性名称,属性类型,根据一个模板文件,自动创建这个类...

  • 16、面向对象编程(二)

    16.1 python中创建类属性 类是模板,而实例则是根据类创建的对象。 绑定在一个实例上的属性不会影响其他实例...

  • NumPy入门

    ndarray对象的属性 ndarray的创建 (1)从python中的列表/元祖等类型创建ndarray,或者从...

  • 2018-07-24

    什么是面向对象?类和对象的区别?类的声明定义语法操作?声明定义类型初始化类型属性定义类型的方法对象的创建、属性的调...

网友评论

      本文标题:python 创建可类型检查的类属性

      本文链接:https://www.haomeiwen.com/subject/curaprtx.html