python - 对象传递对象
问题描述
我是 python 新手,目前正在尝试使用旧模块来输出图形。下面的代码是从使用 rpy 设计标准加速度图表的模块中摘录的(不要查)。
我无法理解 Element 类和 Vector 类如何协同工作。
我一直在尝试将 a 元素对象传递给向量 get_elements 但我不确定这是否是我应该做的。
任何帮助,将不胜感激。谢谢!
class Element(object):
"""Base class for Chartshare vector elements."""
def __init__(self, offset=0, value=0):
self.offset=offset
self.value=value
self.text=''
def setText(self, value):
self.value=value
def getText(self):
return self.value
text = property(getText, setText)
class Vector(object):
"""Base class for Chartshare Vectors."""
def __init__(self, name='', color='black', linetype='o', symbol=1, clutter=0, start=0, end=140, continuous=False, debug=False):
self.name=name
self.color=color
self.linetype=linetype
self.symbol=symbol
self.start=start
self.end=end
self.elements={}
self.debug=debug
self.continuous=continuous
if not self.continuous:
for i in range(self.start, self.end+1):
self.elements[i]='NaN'
def getSymbol(self):
return self._symbol
def setSymbol(self, value):
if (type(value) == int):
if (value >= 0) and (value <= 18):
self._symbol = value
else:
raise SymbolOutOfRange, "Symbol should be an integer between 0 and 18."
elif (type(value) == str):
try:
self._symbol = value[0]
except IndexError:
self._symbol=1
else:
self._symbol = 1
symbol = property(getSymbol, setSymbol)
def getLinetype(self):
return self._linetype
def setLinetype(self, value):
if (value == 'p') or (value == 'o') or (value == 'l'):
self._linetype = value
else:
raise InvalidLinetype, "Line type should be 'o', 'p', or 'l'"
linetype = property(getLinetype, setLinetype)
def get_elements(self):
"""Returns a list with the elements of a Vector."""
retval = []
for i in range(self.start, self.end+1):
if (not self.continuous):
retval.append(self.elements[i])
else:
if (self.elements[i] != 'NaN'):
retval.append(self.elements[i])
return retval
def get_offsets(self):
"""Returns a list of the offsets of a Vector."""
retval = []
for i in range(self.start, self.end+1):
if (not self.continuous):
retval.append(i)
else:
if (self.elements[i] == 'NaN'):
retval.append(i)
return retval
def to_xml(self, container=False):
"""Returns an xml representation of the Vector."""
if (container == False):
container = StringIO.StringIO()
xml = XMLGenerator(container)
attrs = {}
attrs[u'name'] = u"%s" % self.name
attrs[u'symbol'] = u"%s" % self.symbol
attrs[u'linetype'] = u"%s" % self.linetype
attrs[u'color'] = u"%s" % self.color
xml.startElement(u'vector', attrs)
for i in range(self.start, self.end+1):
if (self.elements[i] != 'NaN'):
attrs.clear()
attrs[u'offset'] = u"%s" % i
xml.startElement(u'element', attrs)
xml.characters(u"%s" % self.elements[i])
xml.endElement(u'element')
xml.endElement(u'vector')
def render(self):
"""Plots the current vector."""
if (self.debug):
print "Rendering Vector: %s" % self.name
print self.elements
r.points(x=range(self.start, self.end+1),
y=self.elements,
col=self.color,
type=self.linetype,
pch=self.symbol)
if (self.debug):
print "Finished rendering Vector: %s" % self.name
解决方案
Vectorget_elements()
不接受任何参数。嗯,从技术上讲确实如此。它需要self
. self
是语法糖,可以让你这样做:
vec = Vector()
vec.get_elements()
这相当于:
vec = Vector()
Vector.get_elements(vec)
由于get_elements()
不接受任何参数,因此您无法传递a
给它。略读代码,我没有看到set_elements()
模拟。这意味着您必须直接修改向量元素的字典。
vec = Vector()
vec.elements[a] = ...
print(vec.get_elements()) # >>> [a,...]
推荐阅读
- r - 使用负值和正值更改条数(ggplot)的位置
- android - 在 Browserstack 上自动运行测试时,apk 和 espresso apk 之间的签名不匹配
- css - WordPress 移动菜单
- reporting-services - SSRS 钻取报表使用表达式报表名称无效
- python - NGINX 110:在配置最大文件大小后从上游读取响应标头时连接超时
- php - Laravel 8. 如何使用预定义数据进行播种。他们互相依赖
- python - 基于非日期时间列的升级数据密度
- python - 在 Mac 上安装 PyAudion 时出现此错误
- python - 如何使用 pyfirmata2 使用 INPUT_PULLUP
- php - WooCommerce 运输文件所需的状态