python - 设计这个轨迹类的最佳方法
问题描述
背景:大家好,看到这个问题的人。我是一个 Python 编码初学者(2 周的时间很长!),我相信我最初设计的课程很糟糕,并且正在寻求帮助,以重新设计基础课程(在 Locus.py 中)。
背景:到目前为止,该项目有 4 个类,可以在这里找到 ( https://github.com/asriley/HalfSiblings )。非常基类Locus有一个元组来表示遗传数据的等位基因 (a,b)。下一类,Individual有一个等位基因列表:[(a,b),(c,d),(a,e),(f,d)]。但总的来说,我们有 n 个个体和每个个体的 l 个基因座。
样本数据:7 个人(行)与 3 位点(列)
1,1 5,3 4,3
1,2 4,7 3,7
2,3 3,6 5,4
2,4 7,4 4,9
3,6 8,9 3,0
6,5 4,8 0,0
7,7 7,7 7,9
我试图弄清楚如何设计这个类以将其合并到其他类(特别是个人)中,因为最终我必须使用 networkx 在数据上构建图表。
给出了 Locus 类的完整片段和当前错误:
class Locus:
# constructor
def __init__(self):
self.alleles = ()
def get_alleles(self):
return self._alleles
def set_alleles (self,x, y):
if x and y:
self._alleles = (x,y)
alleles = property (get_alleles, set_alleles)
l1 = Locus()
l1.set_alleles(1,2)
l1.set_alleles(2,3)
print (l1.get_alleles())
Traceback (most recent call last):
File "Locus.py", line 13, in <module>
l1 = Locus()
File "Locus.py", line 4, in __init__
self.alleles = ()
TypeError: set_alleles() missing 1 required positional argument: 'y'
谁能帮助我应该如何正确处理这门课?
文件解析是在 github 链接中的其他类之一中完成的。所以这不是问题。最终,我想向其他类发送一个 2D 个体列表(包含基因位点信息)。
解决方案
我看到您想使用 @property 装饰器在 Locus 类上获取/设置元组,这是一种可能的方法:
class Locus:
@property
def alleles(self):
return self._alleles
@alleles.setter
def alleles(self, value):
try:
x, y = value
# ... Tuple processing goes here ...
self._alleles = (x, y)
except ValueError:
raise ValueError("(x,y) tuple expected")
l1 = Locus()
l1.alleles = (1, 2)
l1.alleles = (2, 3)
print(l1.alleles)
推荐阅读
- python - 类型错误:stream_get_listen_key() 缺少 1 个必需的位置参数:'self'
- php - 如何向子类添加默认的“where”子句?
- javascript - 为什么我的 message.reply 命令不起作用?
- tensorflow - 张量流乘以两层
- python - 如何使用 Boto Python 从 S3 获取最新文件的最后修改日期?
- jodatime - joda DateTimeFormat 本地时区格式问题
- java - 如何自动将所有 Lucene TermQuery 对象转换为 PrefixQuery?
- python - numpy argmin 向量化
- r - GGPlot2 - 绘制过零的弧 (geom_arc)
- r - 使用 readLines 和 R 中的 tm-package 清理 Web 文本