数据类和python attrs的最小替代方案
SelfishClass的Python项目详细描述
自私类
selfishclass是数据类和流行的python attrs包的最小(~1kb)替代品。
selfishclass消除了在类的__init__方法中以self.varname形式分配变量的需要,并为类实例提供了一个简单的__repr__。
为什么不是attrs?
attrs做的很多事情都很好。自私的人有几件事做得很好。我很少需要attr的所有功能。attrs的重量约为100kb。自私的人不到1kb。用伟大哲学家凯文马龙的话说,Me think, why waste time say lot word, when few word do trick.
为什么不使用数据类?
数据类需要Python3.7,这在某些环境中可能不是一个选项。数据类需要将__init__方法重新定义为__post_init__,这会让人觉得不直观,可能需要重写类。自私类只要求您插入装饰器。
安装
selfishclass已经在python 3.4.0和2.7.14上进行了测试,并且可能与大多数其他版本兼容。
使用pip install SelfishClass
通过pip安装用法
SelfishClass提供了一个简单的类装饰器,它需要对现有的类定义进行最小或不更改。
from SelfishClass import selfish @selfish class Teacher(object): def __init__(self, name, id, department=None): pass stan = Teacher('Stan', 445, department='Math') print(stan) >> Teacher: department<str>: Math, id<int>: 445, name<str>: Stan
所有变量都可以作为实例变量和局部变量在__init__中访问。例如,在__init__中,我们可以将name同时称为name和self.name。
如果不希望将某些参数指定为实例变量,则可以指定忽略这些参数。这是通过使用decorator来完成的:
# All positional args will be ignored by selfish @selfish(args=False) class Teacher(object): def __init__(self, name, id, department=None): pass # All kwargs will be ignored by selfish @selfish(kwargs=False) class Teacher(object): def __init__(self, name, id, department=None): pass # Only id will be ignored by selfish @selfish(ignore=['id']) class Teacher(object): def __init__(self, name, id, department=None): pass