小编int*_*ted的帖子

如何在Python中记录类属性?

我正在编写一个轻量级类,其属性旨在可公开访问,并且有时仅在特定实例中被覆盖.在Python语言中没有为类属性或任何类型的属性创建文档字符串的规定.记录这些属性的可接受方式是什么?目前我正在做这样的事情:

class Albatross(object):
    """A bird with a flight speed exceeding that of an unladen swallow.

    Attributes:
    """

    flight_speed = 691
    __doc__ += """
        flight_speed (691)
          The maximum speed that such a bird can attain.
    """

    nesting_grounds = "Raymond Luxury-Yacht"
    __doc__ += """
        nesting_grounds ("Raymond Luxury-Yacht")
          The locale where these birds congregate to reproduce.
    """

    def __init__(self, **keyargs):
        """Initialize the Albatross from the keyword arguments."""
        self.__dict__.update(keyargs)
Run Code Online (Sandbox Code Playgroud)

这将导致类的docstring包含初始标准docstring部分,以及通过扩充赋值为每个属性添加的行__doc__.

虽然在文档字符串样式指南中似乎没有明确禁止这种样式,但它也没有作为选项提及.这里的优点是它提供了一种方法来记录属性及其定义,同时仍然创建一个可呈现的类docstring,并避免编写重复来自docstring的信息的注释.我仍然有点生气,我必须实际写两次属性; 我正在考虑使用docstring中值的字符串表示来至少避免重复默认值.

这是否是对特设社区公约的毁灭性违反?好吗?有没有更好的办法?例如,可以创建包含属性值和文档字符串的字典,然后__dict__在类声明的末尾将内容添加到类和docstring中; 这样可以减少两次输入属性名称和值的需要. 编辑:我认为,这最后一个想法实际上是不可能的,至少不是没有从数据动态构建整个类,这似乎是一个非常糟糕的想法,除非有其他理由这样做. …

python documentation docstring class class-attributes

101
推荐指数
4
解决办法
6万
查看次数

用于测试vim插件的工具

我正在寻找一些测试vim脚本的工具.要么是vim脚本那么

  • 进行单元/功能测试,或
  • 一些其他库的类(例如Python的unittest模块),方便使用
    • 使用参数运行vim,使其对其环境进行一些测试,以及
    • 从输出中确定给定的测试是否通过.

我知道有几个vim脚本进行单元测试,但是它们有点模糊记录,可能实际上可能有用,也可能没用:

VIM-单元:

  • 声称"为vim脚本提供简单的单元测试框架和工具"
  • 第一个也是唯一一个版本(v0.1)于2004年发布
  • 文件没有提到它是否可靠地工作,除了声明它是"完成的票价[原文如此]".

unit-test.vim:

  • 这个看起来也很实验,可能不是特别可靠.
  • 可能已被遗弃或被搁置:最后一次提交是在2009-11(> 6个月前)
  • 没有创建标记的修订版(即没有版本)

因此,非常欢迎来自使用这两个现有模块之一的人员的信息,和/或指向其他更明确可用的选项的链接.

vim unit-testing functional-testing

37
推荐指数
4
解决办法
2746
查看次数

图(点)文件的免费可视编辑器

是否有免费(如"欢呼"),与graphviz或其他图形的Linux兼容,交互式可视化编辑器? aptitude好像在画一个空白.

编辑:"欢呼"意味着"啤酒"和"演讲". meta-edit:我想它应该是"像海滩一样自由".

编辑2:也许一个合适的svg编辑器将是一个更现实的目标.我基本上想要一些可以用来方便地创建标记形状和连接它们的线的集合.实际上,从这些数据中提取图形可能会更具理论意义,因为它包括语义数据(图形)和表示数据(它在屏幕上的排列方式,使用的颜色等).有没有办法用inkscape或其他一些免费的矢量图形编辑器方便地布置标记的形状?我真的需要重新排列节点,并且(重新)在其中流动文本,以最大的方便发生.

我也意识到这确实是一个超级用户的问题.当我找到一个似乎可能为我提供答案的现有问题时,我打算将它重新发布在那里:dia.

编辑3:dia似乎很有用,除了它似乎不可能以任何有用的方式(即除插入手动换行符之外的任何方式)获取节点对象的文本内容.这是一种交易破坏者,因为它破坏了大部分便利因素,这是我以这种方式做事的动机而不是文本编辑器或笔和纸.但是它支持某种事件模型和基于Python的脚本,所以我将稍微挖掘一下,看看我是否可以使用python来包装文本以响应内容更改.除非你们中的一个人有更好的想法..?基本上我想要通过GUI交互显式设置节点大小,并让内容换行和重新缩放(在一定的字体大小范围内)以适应它.富文本非常有用.

换句话说,这实际上是一个有效的SO问题,因为它似乎需要编码.

editor graph graphviz dotfiles

35
推荐指数
3
解决办法
3万
查看次数

有“setup.cfg”的完整文档吗?

Python打包教程建议“应首选静态元数据 (setup.cfg)。动态元数据 (setup.py) 仅应在绝对必要时用作逃生舱口。setup.py 曾经是必需的,但可以通过省略新版本的 setuptools 和 pip。”

打包和分发项目指南解释说“setup.cfg 是一个 ini 文件,其中包含 setup.py 命令的默认选项。有关示例,请参阅 PyPA 示例项目中的 setup.cfg。”

这个例子完全没用,而且似乎没有很多其他有用的信息。本教程中的示例表明,可以setuptools.setup()在 中列出一些或可能全部有效参数setup.cfg,但对此效果没有真正的解释。特别是,不清楚如何将列表参数(例如非常常见且重要的install_requires参数)转换为setup.cfg.

正如我通过推论和实验确定的,正确的方法如下:

[options]
install_requires =
    dependency_1
    dependency_2
Run Code Online (Sandbox Code Playgroud)

显然,最好将其正确记录在某处,以便新的包创建者不必仅仅为了指定其项目的依赖项而经历类似的过程。

存在这样的文档吗?

python packaging setuptools setup.py

31
推荐指数
1
解决办法
1万
查看次数

从X剪贴板获取HTML源或富文本

如何从X剪贴板获取富文本或HTML源代码?例如,如果您从Web浏览器复制一些文本并将其粘贴到kompozer中,它会粘贴为HTML,并保留链接等.但是,相同选择的xclip -o只输出纯文本,以类似于的方式重新格式化elinks -dump.我想将HTML拉出来并进入文本编辑器(特别是vim).

在superuser.com上了同样的问题,因为我希望有一个实用程序可以做到这一点,但我没有得到任何信息性的回复.X剪贴板API对我来说还是一个神秘的野兽; 任何有关黑客攻击的提示都非常受欢迎.这些天我选择的语言是Python,但几乎任何事情都可以.

html browser linux clipboard xorg

24
推荐指数
2
解决办法
4584
查看次数

实现自定义漂亮打印机的最佳方式

定制 pprint.PrettyPrinter

pprint模块的文档提到该方法PrettyPrinter.format旨在使自定义格式化成为可能.

我认为可以在子类中重写此方法,但这似乎没有提供让基类方法应用换行和缩进的方法.

  • 我在这里错过了什么吗?
  • 有没有更好的方法来做到这一点(例如另一个模块)?

备择方案?

我已经检查了pretty模块,看起来很有趣,但似乎没有提供一种方法来自定义其他模块的类格式而无需修改这些模块.

我认为我正在寻找的东西可以让我提供类型(或可能是函数)的映射,这些类型可以识别处理节点的例程的类型.处理节点的例程将获取一个节点并返回它的字符串表示以及子节点列表.等等.

为什么我要看漂亮的印刷品

我的目标是紧凑地打印DocBook格式的自定义格式部分xml.etree.ElementTree.

(我很惊讶没有找到更多Python支持DocBook.也许我错过了那些东西.)

我在一个名为xmlearn的客户端中构建了一些使用lxml的基本功能.例如,要转储Docbook文件,您可以:

xmlearn -i docbook_file.xml dump -f docbook -r book
Run Code Online (Sandbox Code Playgroud)

这是相当半屁股,但它让我得到了我正在寻找的信息.

xmlearn还具有其他功能,例如构建图形图像的能力以及显示XML文档中标记之间关系的转储.这些与这个问题完全无关.

您还可以执行转储到任意深度,或将XPath指定为一组起始点.XPath的东西有点过时了特定于docbook的格式,所以它并没有真正发展完善.

这仍然不是这个问题的答案.我仍然希望那里有一个可以随意定制的漂亮打印机.

python xml docbook subclass pretty-print

21
推荐指数
2
解决办法
5015
查看次数

Python制作系统

各种类似Python make的系统有什么好处和问题?

注意我们在列表项的开头分别使用了' (+) '和' ( - ) '来表示好处和问题.

到目前为止,我知道

  • buildit
    • 以前被称为 pymake
    • ( - )似乎过时了:最后一次发布是在2007年末
  • zc.buildout
    • (+)目前在2010-07-20期间有效
    • 使用类似rc文件的语法 [sections]
    • ( - ) python代码不能(?)容易地集成到配置文件中.
    • 似乎非常重视使用.egg文件.
  • scons的
    • (+)目前在2010-07-20期间有效
    • 配置文件是用纯Python编写的
    • (+) python代码可以很容易地集成到配置文件中
    • ( - )?将Python用于配置文件可能需要额外的冗长
  • WAF
    • (+)? 马克说"好处scons更快"
    • 有任何缺点吗?人们为什么还在使用scons

python makefile

19
推荐指数
1
解决办法
8459
查看次数

Python日志记录:为什么__init__被调用两次?

我试图使用配置文件和自己的处理程序python日志记录.这在某种程度上起作用.让我感到困惑的是__init__两次__del__被召唤并被召唤一次.当我删除整个配置文件的东西并直接在代码中创建处理程序__init__被调用一次并且__del__永远不会被调用.

我的问题:

  1. 为什么__init__叫两次?
  2. 为什么被__del__召唤的频率低于__init__

代码:

#!/bin/env python

import logging
import logging.handlers
import logging.config

class Test1TimedRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
    def __init__(self,filename):
        print "init called"
        logging.handlers.TimedRotatingFileHandler.__init__(self,filename, when='S', interval=86400, backupCount=8, encoding=None)

    def __del__(self):
        print "del called"
        if hasattr(logging.handlers.TimedRotatingFileHandler,"__del__"):
            logging.handlers.TimedRotatingFileHandler.__del__(self)

logging.config.fileConfig('/root/test1.conf')
logger = logging.getLogger("test1")
Run Code Online (Sandbox Code Playgroud)

配置文件:

[formatters]
keys: simple

[handlers]
keys: file

[loggers]
keys: root

[formatter_simple]
format: "%(message)s"

[handler_file]
class: test1.Test1TimedRotatingFileHandler
args: ("/root/test1.log",)
level=INFO

[logger_root]
level: INFO
handlers: file
qualname: test1
Run Code Online (Sandbox Code Playgroud)

输出如下:

init called …
Run Code Online (Sandbox Code Playgroud)

python logging config init handler

13
推荐指数
2
解决办法
5080
查看次数

动态模块创建

我想从字典中动态创建一个模块,我想知道添加元素sys.modules是否真的是最好的方法.例如

context = { a: 1, b: 2 }
import types
test_context_module = types.ModuleType('TestContext', 'Module created to provide a context for tests')
test_context_module.__dict__.update(context)
import sys
sys.modules['TestContext'] = test_context_module
Run Code Online (Sandbox Code Playgroud)

我在这方面的近期目标是能够为计时测试执行提供上下文:

import timeit
timeit.Timer('a + b', 'from TestContext import *')
Run Code Online (Sandbox Code Playgroud)

似乎还有其他方法可以做到这一点,因为Timer构造函数接受对象和字符串.我仍然有兴趣学习如何做到这一点,因为a)它有其他潜在的应用; 和b)我不确定如何使用Timer构造函数的对象; 在某些情况下,这样做可能不如这种做法合适.

EDITS/REVELATIONS/PHOOEYS/EUREKAE:

  1. 我已经意识到,示例代码与运行时间测试实际并不起作用,因为import *只能在模块级,并在其中执行该语句的上下文是一个的功能testit的模块.换句话说,执行该代码时使用的全局字典是__main__,因为我在交互式shell中编写代码时就是这样.因此,解决这个问题的理由有点拙劣,但它仍然是一个有效的问题.

  2. 我发现在第一组示例中运行的代码具有不良影响,即新创建的模块代码执行的命名空间是声明它的模块,而不是 它自己的模块.这就像奇怪的方式,并可能导致各种意想不到的响尾蛇的粗略.所以我很确定这不是这种事情要做的事情,如果它实际上是Guido发光的东西.

  3. 从一个不在python的包含路径中的文件中动态加载模块的类似但略微不同的情况很容易实现imp.load_source('NewModuleName', 'path/to/module/module_to_load.py').这会将模块加载到sys.modules.然而,这并没有真正回答我的问题,因为如果你在没有文件系统嵌入式平台上运行python 会怎么样?

我现在正在与一个相当大的信息过载案件作斗争,所以我可能会弄错,但imp模块中似乎没有任何东西可以做到这一点.

但问题本质上就是如何设置对象的全局(即模块)上下文.也许我应该更具体地问一下?在更大的范围内,如何让Python在将对象转换为给定模块的同时执行此操作?

python module timing dynamic

12
推荐指数
1
解决办法
1万
查看次数

"$ {1-}"vs"$ 1"

git bash完成的代码,特别是函数__gitcomp,使用参数扩展,如"${1-}".这似乎与此类似"$1".有什么不同?

另外:bash手册中记录了哪些内容?

git bash bash-completion

12
推荐指数
2
解决办法
1673
查看次数