繁体   English   中英

如何在 Python 3.9 / 3.10 中记录 Classmethod 属性?

How to Document Classmethod Properties in Python 3.9 / 3.10?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

python 3.9的一个小附加组件是

在 3.9 版更改: 类方法现在可以包装其他描述符,例如 property()。

这在多种情况下很有用,例如作为在 classmethods 上使用 property()的解决方案,或者为了通过配方创建本质上是延迟评估的类属性

class A:
   @classmethod
   @property
   @cache
   def lazy_class_attribute(cls):
       """Method docstring."""
       return expensive_computation(cls)

这种运作良好,并罚款蟒之内,进口类,实例化它或它的子类,不会造成expensive_computation发生,但似乎双方pydocsphinx不仅会造成执行expensive_computation ,当他们试图获得的文档字符串,但不显示这个@classmethod任何文档字符串。

问题:是否有可能 - 从 python (*) 内部 - 懒惰地评估在构建文档时不会执行的类属性/属性?

(*) 在Stop Sphinx from Executing a cached classmethod property 中提出的一种解决方法,感谢 /u/jsbueno,包括根据环境变量修改函数体:

def lazy_class_attribute(cls):
   """Method docstring."""
    if os.environ.get("GENERATING_DOCS", False):
        return
   return expensive_computation(cls)

我非常喜欢这种解决方法,因为特别是它允许人们在记录时呈现不同的输出。 (例如,我的类具有基于类名的路径属性。如果不同的用户执行相同的脚本,路径将不同,因为他们的主文件夹不同。)

但是有两个问题:

  1. 这种方法取决于在 python 之外做的事情,imo,在理想的世界中,不需要在 python 本身之外做
  2. 为了在文档中获取文档字符串,似乎我们最终不得不做一些不直观的事情,比如
class MetaClass:
    @property
    @cache
    def _expensive_function(cls):
        """some expensive function"""

class BaseClass(metaclass=MetaClass):
    lazy_attribute: type = classmethod(MetaClass._expensive_funcion)
    """lazy_attribute docstring"""

在此处输入图片说明

PS:顺便说一下, @classmethod@propertyattribute之间有什么功能区别吗? 他们看起来非常相似。 我目前唯一能看出的区别是,如果该属性需要访问其他@classmethod ,我们需要像上面一样移动元类中的所有内容。

问题暂未有回复.您可以查看右边的相关问题.
3 Nunit 3.10 stacktrace不如3.9详述

我将Nunit与Selenium C#结合使用,并注意到将Nunit升级到3.10已经更改了stacktrace输出。 一个例子是... 3.9.0 3.10.0 是否有某种命令可以获得与3.9中相同的输出级别,而又不会降级到3.9? ...

2018-06-01 09:24:57 1 51   nunit
4 Python:如何使用类方法对类进行子类化

我试图从一个定义了@classmethod 的类中创建一个子类: 这给了我以下错误: 可能我不完全理解子类化的概念,我也一直试图将self传递给Pet.wild没有取得更大的成功。 任何帮助将非常感激! 编辑 我尝试解释我想要做什么:我想使用 classmethod wild而不是使用__ ...

5 如何将classmethod添加到python类?

我正在尝试为我的User类定义一个generate_username。 (django的用户) 库代码将使用它。 如何定义函数generate_username并将其添加到User类? 我应该添加一个类方法吗? ...

6 如何克服python中的“classmethod不可调用”

在阅读了尝试调用 classmethods 的代码中的各种错误后,为什么 python 静态/类方法不可调用? , python 中的staticmethod 和classmethod 是不可调用的吗? 和其他人很明显,Python 类方法是不可调用的。 “为什么”似乎没有得到很好的回答,仅仅说 ...

8 如何在Python中为类方法编写存根

我有一个方法需要另一个类的方法 ... 我将为get_interface_params_by_mac方法编写一个单元测试,在该方法中,我想更改remote_command的实现(我认为它调用存根-如果我写错了,请修复我) 用Python执行此操作的正确方法是什么? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM