iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python怎么使用描述符实现属性类型检查
  • 295
分享到

Python怎么使用描述符实现属性类型检查

2023-06-30 13:06:19 295人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇“python怎么使用描述符实现属性类型检查”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么使用描述符实现

这篇“python怎么使用描述符实现属性类型检查”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么使用描述符实现属性类型检查”文章吧。

    1、如何使用描述符对实例属性做类型检查?

    实际案例:

    在某项目中,我们实现了一些类,并希望能像静态类型语言那样(C,c++,Java)对它们的实例属性做类型检查。

    p = Person()    p.name = 'Bob'# 名字属性必须是str    p.age = 18        # 年龄必须是int    p.height = 1.83# 身高必须是float

    要求:(1)可以对实例变量名指定类型

    (2)赋予不正确类型时抛出异常

    解决方案:

    使用描述符来实现需要类型检查的属性:分别实现__get__, __set__,__delete__方法,在__set__内使用isinstance函数做类型检查。

    拓展:静态类型语言变量只能引用一种确定类型的对象并且不能改变。类型检查是由编译器在编译阶段完成的,对于Python动态类型语言来讲一个变量可以引用任意类型的对象并且可以实时发生改变,也就是解释器不能完成类型检查,只能自己去实现。

    什么是描述符?描述符就是包含__get__, __set__,__delete__这样方法的类,这三个方法只要包含其中一个那它就是描述符。

    实例属性就是在一个类中将另一个类的实例作为该类的一个数属性。

    2、代码演示

    (1)描述符定义和访问流程介绍

    class Descriptor(object):    def __get__(self, instance, cls):        # instance用于区分使用类访问x,还是使用实例访问x        print('in __get__', instance, cls)        return instance.__dict__['x']    def __set__(self, instance, value):        # 在set中对于类型进行检查        print('in __set__')        instance.__dict__['x'] = value    def __delete__(self, instance):        print('in __del__')class A(object):    # 在类中定义一个类属性x    x = Descriptor()a = A()# 会被Descriptor的__get__方法所截获print(a.x)# 直接使用类A访问类属性,instance会被传入Noneprint(A.x)# 会被Descriptor的__set__方法所截获a.x = 5# 会被Descriptor的__del__方法所截获del a.x'''通常来说在描述符这些方法当中访问的是instance.__dict__这个字典,也就是对于它的真正属性进行操作。'''a = A()a.x = 5print(a.__dict__)

    (2)实现使用描述符检查实例属性类型

    class Attr(object):    def __init__(self, name, type_):        self.name = name        self.type_ = type_    def __get__(self, instance, cls):        return instance.__dict__[self.name]    def __set__(self, instance, value):        # 对字段类型做检测        if not isinstance(value, self.type_):            raise TypeError('expected an %s' % self.type_)        instance.__dict__[self.name] = value    def __delete__(self, instance):        del instance.__dict__[self.name]class Person(object):    # 定义一个name字段,申请描述符实例    name = Attr('name', str)    age = Attr('age', int)    height = Attr('height', float)p = Person()p.name = 'Bob'print(p.name)# age赋值字符串类型抛出异常错误# p.age = '17'

    以上就是关于“Python怎么使用描述符实现属性类型检查”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网Python频道。

    --结束END--

    本文标题: Python怎么使用描述符实现属性类型检查

    本文链接: https://www.lsjlt.com/news/329333.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Python怎么使用描述符实现属性类型检查
      这篇“Python怎么使用描述符实现属性类型检查”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么使用描述符实现...
      99+
      2023-06-30
    • Python使用描述符实现属性类型检查的案例解析
      目录1、如何使用描述符对实例属性做类型检查?实际案例:解决方案:2、代码演示1、如何使用描述符对实例属性做类型检查? 实际案例: 在某项目中,我们实现了一些类,并希望能像静态类型语言...
      99+
      2024-04-02
    • 怎么使用Python描述器实现ORM模型
      本文小编为大家详细介绍“怎么使用Python描述器实现ORM模型”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python描述器实现ORM模型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。访问或者修改描...
      99+
      2023-06-29
    • JavaScript面向对象之属性描述符怎么使用
      本文小编为大家详细介绍“JavaScript面向对象之属性描述符怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript面向对象之属性描述符怎么使用”文章能帮助大家解决疑惑,下面跟着小编...
      99+
      2024-04-02
    • React使用PropTypes实现类型检查功能
      目录使用 PropTypes 进行类型检查PropTypes限制单个元素默认 Prop 值使用 PropTypes 进行类型检查 react 内置类型检查功能要在组件的 props ...
      99+
      2023-02-10
      React PropTypes类型检查 React PropTypes React类型检查
    • Python使用描述器实现ORM模型的方法详解
      目录1.__set__方法:设置属性 2.__get__方法:访问属性3.__delete__方法:删除属性 4.描述器实现ORM模型: 总结访问或者修...
      99+
      2024-04-02
    • python利用元类和描述器实现ORM模型的详细步骤
      ORM模型: ORM模型对于后端开发来说肯定是不陌生的,包括很多后端框架比如django,现在都自带这个模型了 ORM(Object Relational Mapping)对象关系映...
      99+
      2024-04-02
    • Python怎么使用Asyncio实现检查网站状态
      这篇文章主要介绍了Python怎么使用Asyncio实现检查网站状态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么使用Asyncio实现检查网站状态文章都会有所收获,下面我们一起来看看吧。我们可...
      99+
      2023-07-05
    • python类的属性和方法怎么使用
      在Python中,类的属性和方法可以通过类的实例进行访问和调用。类的属性可以在类的定义中进行声明,并在实例化后通过实例进行访问。例如...
      99+
      2023-10-10
      python
    • 使用python怎么检查类和对象的成员
      这期内容当中小编将会给大家带来有关使用python怎么检查类和对象的成员,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,P...
      99+
      2023-06-14
    • 怎么使用Go语言反射获取类型属性
      本篇内容主要讲解“怎么使用Go语言反射获取类型属性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Go语言反射获取类型属性”吧!reflect.StructField 和 reflect....
      99+
      2023-07-02
    • python中类中属性和方法怎么定义使用
      今天小编给大家分享一下python中类中属性和方法怎么定义使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
      99+
      2024-04-02
    • 使用JavaScript怎么实现类型判断
      今天就跟大家聊聊有关使用JavaScript怎么实现类型判断,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、判断引用类型和基本类型的类型是不同的,判断基本类型可以用typeof:t...
      99+
      2023-06-15
    • python变量数据类型和运算符怎么使用
      1 数据类型不同类型的变量可以进行的运算是不同的,所以必须理解变量的类型,python中数据类型可以分为:内置类型:数值类型:整型int,浮点型float,复数(complex) 3+5jstr:字符串bool:布尔值【True,False...
      99+
      2023-05-14
      Python
    • Python中静态方法,类方法,属性方法怎么使用
      本篇内容介绍了“Python中静态方法,类方法,属性方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.静态方法通过@static...
      99+
      2023-06-30
    • C#怎么使用符号表实现查找算法
      今天小编给大家分享一下C#怎么使用符号表实现查找算法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。高效检索海量信息(经典查找...
      99+
      2023-06-30
    • CSS中怎么使用relative属性实现相对定位
      这期内容当中小编将会给大家带来有关CSS中怎么使用relative属性实现相对定位,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。CSS relative相对定位设置为相对...
      99+
      2024-04-02
    • CSS中怎么使用background属性实现背景图片
      本篇文章为大家展示了CSS中怎么使用background属性实现背景图片,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在css中,共有如下几个background属...
      99+
      2024-04-02
    • 使用Python怎么实现一个ORM模型
      本篇文章为大家展示了使用Python怎么实现一个ORM模型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。元类对于元类,我的理解其实也便较浅,大概是这个意思所有的类都是使用元类来进行创建的,而所有的类...
      99+
      2023-06-15
    • mybatis使用Integer类型查询出现的问题怎么解决
      本文小编为大家详细介绍“mybatis使用Integer类型查询出现的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis使用Integer类型查询出现的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作