BioPython ② | Python面向对象编程

题目要求

  1. 定义分子类(Molecule)作为基类,包含集合elements和weight作为其属性,用初始化函数,将elements初始化为空集,weight初始化为None;定义show_weight方法,该方法用print函数打印输出分子量weight;定义show_elements方法,用print函数打印输出元素集合。
  2. 定义AminoAcid类,继承Molecule类,包含composition属性,并初始化为下面的元素字典:{‘C’: 0, ‘H’: 0, ‘O’: 0, ‘N’: 0, ‘S’: 0};定义calc_mw方法,根据根据字典的元素组成,计算其分子量(需要用到每种原子的质量,自己去查),并给继承自父类的weight属性赋值;重载show_weight方法,在其中调用calc_mw方法,计算氨基酸的分子量,再调用父类的show_weight方法,打印输出weight值;重载show_elements方法,用元素字典中的非零值的键生成元素集合,再打印输出元素集合。
  3. 分别定义亮氨酸(Leucine)、异亮氨酸(Isoleucine)、半胱氨酸(Cysteine)类,均继承自AminoAcid类,在初始化方法中,根据这三种氨基酸的元素组成(这个要自己去查),为其继承来的元素字典的各元素对应赋值;定义show_composition方法,打印输出氨基酸的元素字典;在Leucine类中定义is_isoform方法,接受一个氨基酸对象作为参数,根据氨基酸的元素组成,判断是否为当前氨基酸的同分异构体,返回布尔值(True或者False)。
  4. 分别生成Leucine、Isoleucine、Cysteine类的实例leu、iso、cys,通过该实例,调用其show_weight、show_elements、show_composition等方法,查看当前氨基酸的分子量、元素集合、元素字典;通过leu,调用其is_isoform方法,分别以实例iso和cys为参数,查看各自的返回值,以判定是否同分异构体。

关键点

我们一个一个来看,我把题目的关键点已经高亮了:

  • 初始化函数:简单来说就是指的__init __(),也就是构造函数(constructor)
  • 空集:这是说的py的一中数据类型——集合。集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
  • 继承:这里得用到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)))

下面是运行结果:

BioPython ② | 面向对象编程Object Oriented Programming相关推荐

  1. Python编程基础:第三十九节 面向对象编程Object Oriented Programming

    第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...

  2. 面向对象编程 object oriented programming(OOP)

    面向对象编程,是一种编程方式,这种编程方式需要使用"对象"来实现 对象的特征 世间万物皆对象 每个对象都是唯一的 对象具有属性和行为(对象的行为包括具有的功能及具体的实现) 对象具 ...

  3. python, 面向对象编程Object Oriented Programming(OOP)

    把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数 ...

  4. 面向对象编程 object oriented programming(OOP)(第二篇)

    函数装饰器 对于某个函数,如果我们希望在不改变该函数代码的前提下,为该函数增加额外的功能,那么就可以使用装饰器来装饰该函数. 装饰器是一个函数,装饰器接收一个函数作为参数(传入的实参是被装饰的函数) ...

  5. SystemVerilog HVL:面向对象编程(Object Oriented Programming, OOP)

    目录 1. 封装 1.1. 构造函数 new 与句柄 1.2. 调用句柄 1.3. 静态属性 与 静态方法 1.4. 权限(local和protected) 2. 继承 2.1. 子类的构造函数 3. ...

  6. Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming)

    Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming) 前言:此笔记为圣思园张龙老师讲述的java视频课程笔记,自己看视频学习时记录的, ...

  7. 面向对象编程(Object Oriented Programming)概念总结及延伸(一)

    1.介绍 笔者的梦想是成为一个架构师,但是要成为一个合格的架构师是相当不易的,它既需要丰富的项目经验也需要不断地吸取新的知识,而且在这过程中我们也要不断巩固基础知识.我也注意到了,现在主流的文章大都集 ...

  8. Object Oriented Programming面向对象编程

    OOP 面向对象编程( Object Oriented Programming)是一种 计算机编程 架构.OOP 的一条基本原则是 计算机程序是由单个能够起到子 程序作用的单元或 对象组合而成.OOP ...

  9. 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性

    一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...

最新文章

  1. pandas使用set_table_attributes函数、display_html函数等在jupyter notebook中并排显示两个dataframe的内容(side by side)
  2. [转]Oracle 执行计划(Explain Plan) 说明
  3. android 获取元素的下标_Appium中定位方式by_android_uiautomator
  4. 天了噜!定义static字段还有顺序要求?
  5. 感染新冠后为啥会丧失​嗅觉?最新《细胞》论文终于搞明白了!
  6. linux nginx django,如何在Linux下使用Nginx部署Django项目
  7. werkzeug serving.run_simple
  8. elasticsearch-analysis-ik-1.10.0中文分词插件安装
  9. [PHP]json_encode增加options参数后支持中文
  10. 解决方案-Visual Studio设置通用配置(包含路径+依赖库)
  11. 企业信息化规划与设计
  12. 气液增压缸用于风扇叶铆钉铆接(产品试压)
  13. Java并发之魂——synchronized深度解析
  14. Python高效编程之88条军规(1):编码规范、字节序列与字符串
  15. NRF24L012.4G模块
  16. android友盟错误日志,友盟崩溃日志分析三种方式
  17. python有什么游戏可以开发-主流游戏引擎有哪些?python能开发手游?
  18. JAVA和MySQL实现公交管理_java+ssh+mysql城市公交管理系统(源码+论文+开题+任务书+中期检查+ppt)...
  19. 个人学习笔记——Python篇(基础)
  20. 【Shell】mksh运行分析

热门文章

  1. 深度学习进阶课程10---减少Overfitting的方法Regularization
  2. 中国大公司罹患“大企业病” 国企成亏损重灾区
  3. 【云原生 · Kubernetes】部署kube-apiserver集群
  4. 定义一个学生类Student,包含三个属性姓名、年龄、性别, 创建三个学生对象存入ArrayList集合中。 A:使用迭代器遍历集合。 B:求出年龄最大的学生,然后将该对象的姓名变为:小猪佩奇。
  5. 半夜仍在加班的我,知道了老板跟女友都在跑步。
  6. golang中builtin包说明
  7. 【笔记】脉搏波手环自研之路开启
  8. Ray----Tune(6):Tune 的实例(一)
  9. linux 进程 ssl 状态,Linux进程状态与信号
  10. 省钱!程序员福利!!全国多地一分钱乘公交优惠活动来了!持续到5月底