博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中attrs_与attrs告别Python中的样板
阅读量:2524 次
发布时间:2019-05-11

本文共 2600 字,大约阅读时间需要 8 分钟。

python中attrs

Python是当今使用的最之一,并且有充分的理由:它是开源的,具有广泛的用途(例如Web编程,业务应用程序,游戏,科学编程等等),并且有一个充满活力和敬业精神的社区来支持它。 这个社区的原因是我们在 (PyPI)中拥有如此众多,种类繁多的软件包,以扩展和改进Python并解决不可避免的小问题。

在本系列中,我们将研究七个PyPI库,它们可以帮助您解决常见的Python问题。 今天,我们将研究 ,这是一个Python软件包,可帮助您快速编写简洁,正确的代码。

属性

如果您使用Python已有一段时间,则可能习惯于编写类似以下代码:

class Book      
(
object
) :
   
def
__init__
(
self
, isbn
, name
, author
) :
       
self .
isbn
= isbn
       
self .
name
= name
       
self .
author
= author

然后编写一个__repr__函数; 否则,将很难记录Book的实例:

         
def
__repr__
(
self
) :
       
return f
"Book({self.isbn}, {self.name}, {self.author})"

接下来,编写一个漂亮的文档字符串,记录预期的类型。 但是您注意到您忘了添加editionpublished_year属性,因此必须在五个位置进行修改。

如果没有必要怎么办?

@ attr.      
s
( auto_attribs
=
True
)
class Book
(
object
) :
    isbn:
str
    name:
str
    author:
str
    published_year:
int
    edition:
int

使用新的类型注释语法为类型注释属性, attrs检测注释并创建一个类。

ISBN具有特定格式。 如果我们要强制执行该格式怎么办?

@ attr.      
s
( auto_attribs
=
True
)
class Book
(
object
) :
    isbn:
str
= attr.
ib
(
)
   
@ isbn.
validator
   
def pattern_match
(
self
, attribute
, value
) :
        m
=
re .
match
( r
"^( \d {3}-) \d {1,3}- \d {2,3}- \d {1,7}- \d $"
, value
)
       
if
not m:
           
raise
ValueError
(
"incorrect format for isbn"
, value
)
    name:
str
    author:
str
    published_year:
int
    edition:
int

attrs库也对提供了强大的支持。 将第一行更改为@ attr.s(auto_attribs = True,Frozen = True)意味着Book现在是不可变的:尝试修改属性将引发异常。 相反,例如,如果我们需要将发布向前推进一年,则可以使用attr.evolve(old_book,published_year = old_book.published_year + 1)来获取经过修改的实例。

在本系列的下一篇文章中,我们将研究singledispatch ,该库使您可以追溯地向Python库添加方法。

查看本系列中的前几篇文章

翻译自:

python中attrs

转载地址:http://dtbzd.baihongyu.com/

你可能感兴趣的文章
MBTIles实现
查看>>
创建WPF项目
查看>>
电源模块的PCB设计
查看>>
光猫与普通的家用猫
查看>>
Asp.Net 构架(Http Handler 介绍) - Part.2
查看>>
6.11 spring框架
查看>>
Python--eval()函数
查看>>
【转载】Linux下的crontab定时执行任务命令
查看>>
STM32 HAL库的定时器中断回调函数跟串口中断回调函数
查看>>
vs2010找不到ado.net 实体数据模型解决办法
查看>>
(转)深入理解javascript连续赋值表达式
查看>>
用户场景分析
查看>>
MySQL创建数据库及用户
查看>>
Springboot静态页面放在static路径下还是访问不到
查看>>
centos7 重启网卡失败
查看>>
springboot(一)注解
查看>>
07 Mybatis的多表查询1----1对多和多对1
查看>>
debian和ubuntu的sh dash bash
查看>>
java9-8 局部内部类
查看>>
数据库分页
查看>>