我的机器学习教程「美团」算法工程师带你入门机器学习 以及 「三分钟系列」数据结构与算法 已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。
欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~
最近重拾了Python的学习,在复习语法和数据结构的同时,我也重新学习了Python中最重要的面向对象应用。
从前看Python的面向对象模块时并未完全领悟到类与对象的关系和底层逻辑。后来学了C语言,我试着用C语言的ADT的方式去理解类以及实例化的类,觉得两者之间有很多共性。
比如,Python中的四大特性:继承,多态,封装以及抽象,是在ADT中的抽象和封装基础上发展而来,其构造更加完善,定义更加普遍。此时此刻,我才理解了Python的发明者具有多神奇的创造能力。
作为强大的工具,多加练习和应用才是最好的办法,因此自己动手实现了一个小小的程序,通过类简单实现了一个有理数运算的对象操作,包含两个属性两个方法,供大家复习和参考
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 13 22:04:53 2018
@author: Administrator
"""
#practice for Class method and ADT
#抽象数据类型之:类
#类作用:将实例化的对象赋为有理数并求和,约分
class rational:
@staticmethod #使用修饰符将此函数局部化
def _gcd(m , n): #函数名前加下划线是约束此函数于CLASS内部
if n == 0:
m, n = n, m
while m != 0:
m, n = n % m, m #此函数用来实现最大公约数
return n
def __init__(self, num, den = 1): #构造函数,用于初始化
if not isinstance(num, int) or not isinstance(den, int):
raise TypeError
if den == 0:
raise ZeroDivisionError
sign = 1
if num < 0:
num , sign = -num, -sign
if den < 0:
den, sign = -den, -sign
g = rational._gcd(num, den)
#call function,利用之前定义的GCD函数赋值给G
self._num = sign * (num//g)
self._den = den//g #整除分子,分母
#define a method Plus
def plus(self, another):
_den = self._den * another._den
_num = (self._num * another._den) + (self._den * another._num)
return rational(_num, _den)
def printf(self):
print(str(self._num) + "/" + str(self._den))
if __name__ == '__main__': #将文件作用域约束在此文件中
r1 = rational(3, 1)
r2 = r1.plus(rational(7,15))
r2.printf()
输出结果: