Python范围类/子类
我有如下Range类的代码:Python范围类/子类,python,subclass,Python,Subclass,我有如下Range类的代码: class Range: def __init__(self, start, end): self.setStart(start) self.setEnd(end) def getStart(self): return self.start def setStart(self, s): self.start = s def getEnd(self): return self.end
class Range:
def __init__(self, start, end):
self.setStart(start)
self.setEnd(end)
def getStart(self):
return self.start
def setStart(self, s):
self.start = s
def getEnd(self):
return self.end
def setEnd(self, e):
self.end = e
def getLength(self):
return len(range(self.start, self.end))
def overlaps(self, r):
if (r.getStart() < self.getEnd() and r.getEnd() >= self.getEnd()) or \
(self.getStart() < r.getEnd() and self.getEnd() >= r.getEnd()) or \
(self.getStart() >= r.getStart() and self.getEnd() <= r.getEnd()) or \
(r.getStart() >= self.getStart() and r.getEnd() <= self.getEnd()):
return True
else:
return False
一般来说,如果您提供了特定的错误消息或出错的事情,那么回答问题就容易多了。下面是我尝试运行上述程序时发生的情况:
- 首先:
如果seq==正,则打开`SyntaxError: invalid syntax`
。这里怎么了?哦,是的,你在条件句后面缺了一个冒号。如果添加,则该文件至少可以解析。因此,让我们尝试进行一些编码:
# Your code here, then: feature = DNAFeature()
- 跑步可以带来:
哦,好的,我们需要将一些参数传递给TypeError: __init__() takes exactly 3 positional arguments (1 given)
的初始化器。让我们把它放在+串上,称之为foo:DNAFeature
feature = DNAFeature(1, "foo")
- 现在我们得到:
那是怎么回事?好的,您还没有定义AttributeError: 'DNAFeature' object has no attribute 'setStrand'
。(注意:您不必这样做。但稍后会有更多内容。)让我们来定义它:setStrand
def setStrand(self, strand): self.strand = strand
对,不一样以上是错误的代码。我希望您已经编写了
系列
课程,并且没有将其作为课程的一部分提供,因为如果已经编写了,您将学习一门教得很差的课程。主要问题是getter和setter的使用——我猜您是Java出生和长大的?在Python中,您不需要为所有内容编写getter和setter,因为如果需要的话,您可以在以后添加它们。相反,只需使用类属性。查看范围的以下代码:
class Range:
def __init__(self, start, end):
self.start = start
self.end = end
def length(self):
return self.end - self.start
def overlaps(self, other):
return not(self.end < other.start or other.end < self.start)
看看你是否能解决这个问题。一般来说,如果你提供了一条特定的错误信息或是出了问题,回答问题就会容易得多。下面是我尝试运行上述程序时发生的情况:
- 首先:
`SyntaxError: invalid syntax`
如果seq==正,则打开。这里怎么了?哦,是的,你在条件句后面缺了一个冒号。如果添加,则该文件至少可以解析。因此,让我们尝试进行一些编码:
# Your code here, then:
feature = DNAFeature()
- 跑步可以带来:
TypeError: __init__() takes exactly 3 positional arguments (1 given)
哦,好的,我们需要将一些参数传递给DNAFeature
的初始化器。让我们把它放在+串上,称之为foo:
feature = DNAFeature(1, "foo")
- 现在我们得到:
AttributeError: 'DNAFeature' object has no attribute 'setStrand'
那是怎么回事?好的,您还没有定义setStrand
。(注意:您不必这样做。但稍后会有更多内容。)让我们来定义它:
def setStrand(self, strand):
self.strand = strand
我不想讨论代码的其余问题(提示:在使用变量之前需要定义变量),但这是您应该做的事情
对,不一样以上是错误的代码。我希望您已经编写了系列
课程,并且没有将其作为课程的一部分提供,因为如果已经编写了,您将学习一门教得很差的课程。主要问题是getter和setter的使用——我猜您是Java出生和长大的?在Python中,您不需要为所有内容编写getter和setter,因为如果需要的话,您可以在以后添加它们。相反,只需使用类属性。查看范围的以下代码:
class Range:
def __init__(self, start, end):
self.start = start
self.end = end
def length(self):
return self.end - self.start
def overlaps(self, other):
return not(self.end < other.start or other.end < self.start)
看看你是否能找到它的工作原理。在最一般的情况下(不做任何假设),这似乎就是你需要的:
class DNAFeature(Range):
def __init__(self, start, end):
self.setStart(start)
self.setEnd(end)
self.strand = None
self.sequencename = None
def setStrand(self, s):
self.strand = s
def getStrand(self):
if self.sequenceName == 'plus':
return 1
elif self.sequenceName == 'minus':
return -1
else:
return 0
def setSequenceName(self, s):
self.sequencename = s
def getSequenceName(self, s):
return self.sequenceName
您会注意到,在这里,我重新定义了init。这是有原因的。我记得在前面的一个问题中,您提到这是一个Java赋值,刚刚重命名为python。在Java中,构造函数不是继承的(如果我错了,请纠正我)。因此,如果使用相同的评分标准,您将因未在此处重新定义构造函数而失去分数
希望这有助于在最一般的情况下(不做任何假设),这似乎是您所需要的:
class DNAFeature(Range):
def __init__(self, start, end):
self.setStart(start)
self.setEnd(end)
self.strand = None
self.sequencename = None
def setStrand(self, s):
self.strand = s
def getStrand(self):
if self.sequenceName == 'plus':
return 1
elif self.sequenceName == 'minus':
return -1
else:
return 0
def setSequenceName(self, s):
self.sequencename = s
def getSequenceName(self, s):
return self.sequenceName
您会注意到,在这里,我重新定义了init。这是有原因的。我记得在前面的一个问题中,您提到这是一个Java赋值,刚刚重命名为python。在Java中,构造函数不是继承的(如果我错了,请纠正我)。因此,如果使用相同的评分标准,您将因未在此处重新定义构造函数而失去分数
希望这有帮助你说它“看起来”不对是什么意思?你开过吗?您是否收到任何错误消息?你不希望它表现出什么样的行为?想必,你是在上编程课而不是艺术课。摆脱那些能手和能手。Python不是Java。即使您需要在某些_range.end=…
中添加一些真正的逻辑,您也可以通过属性来添加,而不破坏任何代码。@Aaron:我导入了它,但由于seq==POSITIVE的代码不正确,所以无法导入,我只是不知道如何将getStrand设置为response,因为功能串是正数,它返回1,当特征串为负数时,它返回-1,在没有任何设置的情况下,返回为0。Thanks@pmt0512在函数getStrand
中,在哪里定义了seq
?此外,代码的复数形式是代码而不是代码。代码是一个“集体名词”。你怎么能有两个密码?这和拥有两套家具一样有意义。你会说‘两件家具’,就像你说的‘两件代码’。@AaronMcSmooth:除非你要输入几个代码来解锁保险箱——但我也假设他在上编程课,而不是英语课。你说‘看起来’不对是什么意思?你开过吗?您是否收到任何错误消息?你不希望它表现出什么样的行为?想必,你是在上编程课而不是艺术课。摆脱那些能手和能手。Python不是Java。即使您需要在某些_range.end=…
中添加一些真正的逻辑,您也可以通过属性来添加,而不破坏任何代码。@Aaron:我导入了它,但由于seq==POSITIVE的代码不正确,所以无法导入,我只是不知道如何将getStrand设置为response,因为功能串是正数,它返回1,当特征串为负数时,它返回-1,w