我们一个一个来看,我把题目的关键点已经高亮了:
__init __()
,也就是构造函数(constructor);super().__init__()
,如果子类和父类,都写了init方法,那么父类的init方法就会被子类覆盖。想调用父类的init方法需要用super去调用;map()
,一行代码就解决了;filter()
也是一行解决;elements
这个字典类型的数据相同,判断两个字典是否相同,可以直接用==
来判断,python已经内置重载了==
,极其方便。注释比较详细,下面就是代码了~
class Molecule:'''Molecule类elements初始化为空集,weight初始化为 None;show_weight方法,该方法用print函数打印输出分子量 weight;定义show_elements方法,用print函数打印输出元素集合。'''def __init__(self):# 用set()来初始化空集self.elements = set()self.weight = Nonedef show_weight(self):print(self.weight)def show_elements(self):print(self.elements)class AminoAcid(Molecule):'''AminoAcid类(继承Molecule类)composition:初始化的元素字典Molecular_mass:相对原子质量'''def __init__(self):super().__init__()self.composition = {'C': 0, 'H': 0, 'O': 0, 'N': 0, 'S': 0}self.Molecular_mass = {'C': 12, 'H': 1, 'O': 16, 'N': 14, 'S': 32}''' 另一种写法:直接在calc_mw()中给self.weight赋值,后面直接调用show_weight()即可def calc_mw(self):self.weight = sum(map(lambda x, y: x * y, self.composition.values(), self.Molecular_mass.values()))'''def calc_mw(self):# 对应元素的个数和相对原子质量相乘并求和return sum(map(lambda x, y: x * y, self.composition.values(), self.Molecular_mass.values()))def show_weight(self):# 重新定义show_weight(),也就是更新了一下分子质量并且打印,self.weight = self.calc_mw()print(self.calc_mw())def show_elements(self):# 将原子个数大于0的原子重新组合成名为 elements 的集合self.elements = set(dict(filter(lambda item: item[1] > 0, self.composition.items())))print(self.elements)# print(type(self.elements))class Leucine(AminoAcid):def __init__(self):super().__init__()self.composition = {'C': 6, 'H': 13, 'O': 2, 'N': 1, 'S': 0}def show_composition(self):# 与 elements类似,数据类型是字典self.elements = dict(filter(lambda item: item[1] > 0, self.composition.items()))print(self.elements)# print(type(self.elements))def is_isoform(self, another):# python内置重载了"==",可以实现字典相等与否的判断return True if self.elements == another.elements else Falseclass Isoleucine(AminoAcid):def __init__(self):super().__init__()self.composition = {'C': 6, 'H': 13, 'O': 2, 'N': 1, 'S': 0}def show_composition(self):self.elements = dict(filter(lambda item: item[1] > 0, self.composition.items()))print(self.elements)class Cysteine(AminoAcid):def __init__(self):super().__init__()self.composition = {'C': 3, 'H': 7, 'O': 2, 'N': 1, 'S': 1}def show_composition(self):self.elements = dict(filter(lambda item: item[1] > 0, self.composition.items()))print(self.elements)leu = Leucine()
iso = Isoleucine()
cys = Cysteine()print("leu:")
leu.show_weight()
leu.show_elements()
leu.show_composition()
print("iso:")
iso.show_weight()
iso.show_elements()
iso.show_composition()
print("cys:")
cys.show_weight()
cys.show_elements()
cys.show_composition()print("leu & iso: {}".format(leu.is_isoform(iso)))
print("leu & cys: {}".format(leu.is_isoform(cys)))
下面是运行结果:
下一篇:microservices 简介