OO不是我最强的套装,所以请耐心等待.我想设计一个这样的类结构:
class Mammal(object):
def __init__(self):
super(Mammal, self).__init__()
self.dna_sequence = self.sequence_dna()
def sequence_dna(self):
blood_sample = 42
# Code goes here to sequence the mammal's DNA - may take a while.
Run Code Online (Sandbox Code Playgroud)
然后,在另一个班级,我想继承哺乳动物:
class Human(Mammal):
super(Human, self).__init__()
self.dna_sequence = self.sequence_dna()
def sequence_dna(self):
blood_sample = 43
# use blood sample and Human algo to sequence it.
Run Code Online (Sandbox Code Playgroud)
所以这就是我被困住的地方.当我创建Human对象时,我不希望它去进行DNA测序,因为这需要一段时间.但我需要Human对象具有dna_sequence属性,以便我可以稍后进行排序.解决方案是在init方法中设置属性,但是要设置它None直到调用sequence_dna方法?看起来像kludgy,特别是因为我有很多变量,所有变量都取决于DNA测序的结果,因此设置为无.
我觉得我错过了一块拼图......
处理此问题的一种方法是延迟初始化.你可以做点什么......
class Mammal(object):
def __init__(self):
self.blood_sample = 42
self.dna_sequence = None
def get_dna_sequence(self):
if self.dna_sequence == None:
self.generate_dna_sequence(self.blood_sample)
return self.dna_sequence
def generate_dna_sequence(self, blood_sample=None):
self.dna_sequence = stuff_to_generate_sequence(blood_sample)
class Human(Mammal):
def __init__(self):
super(Mammal, self).__init__()
self.blood_sample = 43
Run Code Online (Sandbox Code Playgroud)
然后,人自动继承'get_dna_sequence',但两个版本只会根据请求进行计算.
您可以通过将get_dna_sequence()方法设置为生成器来进一步对其进行操作,在您正在进行的计算/映射可能被"分块"的情况下,您应该在处理它时将其输出块,以便您不必将整个事物记在内存中.(对于DNA,我认为这将是相当大的..)
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |