背景信息:对于查看此问题的任何人都可以。我是一个开始的python编码器(2周强大!)我相信我最初设计我的课程很差,并且正在寻求帮助以重新设计基本的(在Locus.py中)。
背景:到目前为止,该项目有4个类,可以在这里找到(https://github.com/asriley/HalfSiblings)。基类基因座具有表示遗传数据等位基因的元组(a,b)。下一个类个人有一个等位基因列表:[(a,b),(c,d),(a,e),(f,d)]。 一般来说,我们每个人都有n个人和l个基因座。
样本数据:7个位点(cols)的7个人(行)
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列表(包含遗传基因座信息)发送给其他班级。
答案 0 :(得分:0)
我看到你想使用@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)