指示方法的decorator既是类又是实例方法

combomethod的Python项目详细描述


travisciPyPI Package latest releaseSupported versionsSupported implementationsWheel packaging supportTest line coverageTest branch coverage

python有实例方法、类方法(@classmethod)和静态 方法(@staticmethod)。但是它没有一个清晰的方法来调用一个方法 在类或其实例上。有了combomethod,它就有了。

from combomethod import combomethod

class A(object):

    @combomethod
    def either(receiver, x, y):
        return x + y

a = A()
assert a.either(1, 3) == 4
assert A.either(1, 3) == 4

喂!您的方法现在接受类或实例-以 一个你想叫它的人。

讨论

在某些情况下,可以用@classmethod来伪造@combomethod。在 例如,上面的代码没有对类的真正引用 或者实例,并且either可以被指定为@classmethod, 因为它们可以用类或实例调用。但是,有一个 问题:类方法总是将类传递给方法,即使它们是 用实例调用。使用这种方法,您永远无法访问 实例变量。哎哟!

或者,either可以被指定为@staticmethod, 已删除其receiver参数。但如果那样的话 可从实例或类调用,在任何情况下都不会传递 从中调用方法的对象。没有办法进入 类或实例变量。哎哟!

@classmethod@staticmethod一样有用,它们不处理 (有时很重要)你需要打电话给 类或实例需要对执行 打电话来。下面是一个需要这样做的示例:

class Above(object):

    base = 10

    def __init__(self, base=100):
        self.base = base

    @combomethod
    def above_base(receiver, x):
        return receiver.base + x

a = Above()
assert a.above_base(5) == 105
assert Above.above_base(5) == 15

aa = Above(12)
assert aa.above_base(5) == 17
assert Above.above_base(5) == 15

当您需要调用实例或类时,您还需要 关于执行调用的对象,@combomethodrocks and rolls。

注释

  • 这个模块主要是一个方便的包装,测试, Mike Axiak的洞察力和代码的文档化 Stack Overflow post。 谢谢你,迈克!
  • 自动多版本测试管理 pytestpytest-covcoverage,和 tox。 持续集成测试 用Travis-CI。 用pyroma包装绒布。
  • 成功地为所有最新型号的 python:2.6、2.7、3.3、3.4、3.5、3.6和3.7预发行版以及最新版本 pypy和pypy3构建。
  • 有关完整的更改日志,请参见CHANGES.yml
  • 作者,Jonathan Eunice@jeunice on Twitter 欢迎您的意见和建议。

安装

要安装或升级到最新版本:

pip install -U combomethod

您可能需要在它们前面加上sudo来授权安装。在 在没有超级用户权限的环境中,您可能需要使用pip--user选项,仅为单个用户而不是整个系统安装。 您可能还需要python版本的单独pip2pip3安装程序, 取决于您的系统配置。如果pip不是 为您需要的特定python实例进行了良好的配置,这是一个有用的回退:

python3.6 -m pip install -U combomethod

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

推荐PyPI第三方库


热门话题
使用ApacheCXF和Eclipse的web服务中的java JNI问题   java如何在模式中正确声明扩展?   java Mapstruct从源对象的一组字段中准备一个列表,并将其设置为目标对象   Java:Infinite循环hasnetint()   面向对象Java装饰图案比萨面层   oop Java将常用方法放入超类   Java程序不断崩溃   使用扫描仪写入文本文件时出现java异常错误   java如何打印没有尾随逗号的地图?   使用java在中缀到后缀应用程序中获得错误输出   Java正则表达式拆分运算符的数学表达式,不包括括号中的运算符   java如何从KeyClope获取用户详细信息(不是登录用户,而是通过id获取任何用户)   java如何通过选择微调器启用或禁用editText   java jasypt有多安全?   java上传图像失败   java JDBC批量更新有什么帮助?   java如何在添加新视频文件时获取通知   java将值Bean传递给类,然后将类传递给JSP   java Primefaces Datatable在触发操作时提供空指针异常   Java:在可调整大小的组件中调整旋转形状的大小