我看到像这样的模式
def __init__(self, x, y, z):
...
self.x = x
self.y = y
self.z = z
...
Run Code Online (Sandbox Code Playgroud)
经常使用更多参数.有没有一种好方法可以避免这种乏味的重复性?该类应该继承namedtuple吗?
我在这里开始使用"让我们制作一个条形图I"示例:http://bost.ocks.org/mike/bar/
而且我很难弄清楚如何使用HTML5元素制作的非常简单的条形图更新新数据.这是我的代码:
<!DOCTYPE html>
<html>
<head>
<style>
#work_queues_chart div {
font-size: 0.5em;
font-family: sans-serif;
color: white;
background-color: steelblue;
text-align: right;
padding: 0.5em;
margin: 0.2em;
}
</style>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8" />
<script type="text/javascript">
function init() {
var data = [0, 0, 0, 0, 0, 0];
/* scale is a function that normalizes a value in data into the range 0-98 */
var scale = d3.scale.linear()
.domain([0, 200])
.range([0, 98]);
var bars = d3.select("#work_queues_chart")
.selectAll("div")
.data(data)
.enter().append("div");
bars.style("width", function(d) …Run Code Online (Sandbox Code Playgroud) 我是一个大量使用继承的Python项目的维护者.有一种反模式导致了我们一些问题并使阅读变得困难,我正在寻找一种解决它的好方法.
问题是将非常长的参数列表从派生类转发到基类 - 大多数但并不总是在构造函数中.
考虑这个人为的例子:
class Base(object):
def __init__(self, a=1, b=2, c=3, d=4, e=5, f=6, g=7):
self.a = a
# etc
class DerivedA(Base):
def __init__(self, a=1, b=2, c=300, d=4, e=5, f=6, g=700, z=0):
super().__init__(a=a, b=b, c=c, d=d, e=e, f=f, g=g)
self.z = z
class DerivedB(Base):
def __init__(self, z=0, c=300, g=700, **kwds):
super().__init__(c=c, g=g, **kwds)
self.z = z
Run Code Online (Sandbox Code Playgroud)
此时,一切看起来都像DerivedA- 长参数列表,所有这些都明确地传递给基类.
不幸的是,我们在过去几年中遇到了一些问题,包括忘记传递参数并获取默认值,以及没有注意到一个派生类中的一个默认参数与默认默认值不同.
它还使代码不必要地笨重,因此难以阅读.
DerivedB是更好并修复这些问题,但有一个新的问题,派生类中的方法的Python帮助/ sphinx HTML文档是误导,因为很多重要的参数都隐藏在**kwds.
有没有办法将正确的签名 - 或者至少是正确签名的文档 - 从基类方法转发到派生类方法?
当我为什么要使用attr.ib(default=attr.Factory(list))过attr.ib(default=[])?
从文档中我看到Factory用于生成一个新值,如果你使用带输入的lambda表达式,这是有意义的; 但是,如果您只是生成一个空列表,我不明白为什么要使用它.
我在这里错过了什么?
我想用Python来创建JSON.
既然我找不到可以帮助我的库,我想知道是否可以检查Python文件中类的顺序?
例
# example.py
class Foo:
pass
class Bar:
pass
Run Code Online (Sandbox Code Playgroud)
如果我导入example,我想知道类的顺序.在这种情况下,它是[Foo,Bar]而不是[Bar,Foo].
这可能吗?如果"是",怎么样?
我对yaml/json不满意.我有一个模糊的想法是通过Python类创建配置(只有类,而不是对象的实例化).
欢迎使用能够帮助我实现目标的答案(使用简单有趣的工具创建JSON).
前言
\n\n我想知道如何以Python方式概念化数据类。\n特别是我\xe2\x80\x99m 谈论 DTO(数据传输对象)。
\n\n我在 @jeff-oneill 问题 \xe2\x80\x9c使用 Python 类作为数据容器\xe2\x80\x9d 中找到了一个很好的答案,其中 @joe-kington 很好地使用了内置namedtuple.
问题
\n\n在 python 2.7 文档的第 8.3.4 节中,有一个关于如何组合多个命名元组的很好的示例。\n我的问题是如何实现相反的效果?
\n\n例子
\n\n考虑文档中的示例:
\n\n>>> p._fields # view the field names\n(\'x\', \'y\')\n\n>>> Color = namedtuple(\'Color\', \'red green blue\')\n>>> Pixel = namedtuple(\'Pixel\', Point._fields + Color._fields)\n>>> Pixel(11, 22, 128, 255, 0)\nPixel(x=11, y=22, red=128, green=255, blue=0)\nRun Code Online (Sandbox Code Playgroud)\n\n如何从 \xe2\x80\x9cPixel\xe2\x80\x9d 实例推断出 \xe2\x80\x9cColor\xe2\x80\x9d 或 \xe2\x80\x9cPoint\xe2\x80\x9d 实例?
\n\n最好是具有蟒蛇精神。 …
在Python模块的文档中attrs 指出,有一种方法可以将属性的类转换为字典表示形式:
例:
>>> @attr.s
... class Coordinates(object):
... x = attr.ib()
... y = attr.ib()
...
>>> attr.asdict(Coordinates(x=1, y=2))
{'x': 1, 'y': 2}
Run Code Online (Sandbox Code Playgroud)
如何实现对立面:Coordinates从有效的字典表示形式中获取的实例,而不使用样板内容,并且对attrs模块感到满意?
python ×6
python-attrs ×6
namedtuple ×2
python-2.7 ×2
attributes ×1
charts ×1
d3.js ×1
dto ×1
dynamic ×1
python-3.x ×1