我想让子类修改它从父类继承的类变量.
我想做一些事情:
class Parent(object):
foobar = ["hello"]
class Child(Parent):
# This does not work
foobar = foobar.extend(["world"])
Run Code Online (Sandbox Code Playgroud)
理想情况下:
Child.foobar = ["hello", "world"]
Run Code Online (Sandbox Code Playgroud)
我可以:
class Child(Parent):
def __init__(self):
type(self).foobar.extend(["world"])
Run Code Online (Sandbox Code Playgroud)
但是每当我实例化一个Child的实例时,"world"会被附加到列表中,这是不希望的.我可以进一步修改它:
class Child(Parent):
def __init__(self):
if type(self).foobar.count("world") < 1:
type(self).foobar.extend(["world"])
Run Code Online (Sandbox Code Playgroud)
但这仍然是一个黑客,因为我必须在它工作之前实例化一个Child实例.
有没有更好的办法?
我开始使用IPython笔记本来记录我的一些代码和交互式使用示例.为了避免文档从代码中过时,我希望笔记本中的代码能够定期执行以捕获输出中的任何更改并标记运行时错误.
我用它nosetests来运行回归测试,并想知道是否有办法让它为此目的执行IPython笔记本.请注意,我不是试图nosetests在IPython笔记本中运行(就像在ipython_nose中一样).东西沿的线条更doctest插件.这样的插件存在吗?
我在python中使用matplotlib在数据集上应用了pca.但是,matplotlib不提供像Matlab这样的t平方分数.有没有办法像Matlab一样计算Hotelling的T ^ 2得分?
谢谢.
我正在研究一个问题,我正在实例化一个对象的许多实例.大多数情况下,实例化的对象是相同的.为了减少内存开销,我想让所有相同的对象指向同一个地址.但是,当我修改对象时,我想要创建一个新实例 - 基本上是写时复制行为.在Python中实现这一目标的最佳方法是什么?
Flyweight模式很接近.一个例子(来自http://codesnipers.com/?q=python-flyweights):
import weakref
class Card(object):
_CardPool = weakref.WeakValueDictionary()
def __new__(cls, value, suit):
obj = Card._CardPool.get(value + suit, None)
if not obj:
obj = object.__new__(cls)
Card._CardPool[value + suit] = obj
obj.value, obj.suit = value, suit
return obj
Run Code Online (Sandbox Code Playgroud)
其行为如下:
>>> c1 = Card('10', 'd')
>>> c2 = Card('10', 'd')
>>> id(c1) == id(c2)
True
>>> c2.suit = 's'
>>> c1.suit
's'
>>> id(c1) == id(c2)
True
Run Code Online (Sandbox Code Playgroud)
期望的行为是:
>>> c1 = Card('10', 'd')
>>> c2 = Card('10', 'd') …Run Code Online (Sandbox Code Playgroud) 我有一个二维数据数组,我想将其可视化为 D3 中的热图。
从我看到的例子中,包括:
看起来您必须将行和列编码为每个数据元素的属性。有没有办法利用数据的结构(即它是一个可以用 [i][j] 符号索引的二维数组)来避免对位置信息进行冗余编码?
如果没有,是否有一种简洁和/或有效的方法来生成对位置信息进行编码的数据结构?我的意思是嵌套 for 循环以外的其他内容:
myData = [[1, 2], [3, 4]]
myDataWithPos = []
nRow = myData.length
nCol = myData[0].length
for (i = 0; i < nRow; i++){
for(j = 0; j < nCol; j++){
myDataWithPos.push({val: myData[i][j], row: i, col: j})
}
}
Run Code Online (Sandbox Code Playgroud) python ×4
python-2.7 ×2
d3.js ×1
ipython ×1
javascript ×1
matplotlib ×1
nose ×1
nosetests ×1
pca ×1
scipy ×1
statistics ×1