数据类和python attrs的最小替代方案

SelfishClass的Python项目详细描述


Logo

自私类

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同时称为nameself.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么我的代码永远运行?它只是一堆带int的for循环,应该是递减的?   java如何更改IntelliJ IDEA中的XML缩进?   java如何使未填充的int数组不打印0?   eclipse My Weka Java代码结果*Weka*虚拟*STRING*用于*STRING*属性*   java泄漏了Windows com。安卓内部的政策恳求   java这个无限循环的原因是什么?   swing My标签在Java中很模糊   java如何在组件表示存储扩展中获取组件对象   java如何避免selenium网格中的会话超时   Java乘法测验,如果答案错误,如何循环   在Java HttpServlet Google app engine中保存对象   java ArrayList过滤器   java跳跃减慢了xvelocity:使用Libgdx/Box2D进行跳跃和跑步   java删除、复制和修改pom。xml文件   当提供的时区与服务器的时区相同时,RestCall中的java@DateTimeFormat(iso=iso.DATE_TIME)不工作   java Spring批处理多线程默认限制为10隐式?   安卓错误java。lang.UnsupportedOperationException:无法转换为维度:type=0x1