python数据结构----------抽象数据类型和python类

废话

最近在看python数据结构的书,第二章是复习python面向对象编程,其中提到了python面向对象编程的特点(封装成模块,我的理解就是把跟某一个功能相关的操作都封装成一个类,对外部需要使用该功能的人来说,只需要调用提供的接口 其实就是调用这个类,不用关心内部具体是如何实现的)

之前对面向对象编程学的就不是很好,现在重新看,发现也没有那么难了,,,哈哈哈

实现一个有理数类

先来看一个例子:(关于定义有理数类,包括有理数的定义,这里是用两个整数分别表示分子和分母,然后又定义了有理数相关的操作,包括加减乘除等)

另外 对于python中:python语言为所有的运算符(当然也包括算术运算符)都规定了特殊方法名!!!
我的理解就是当你在类中定义相关内部函数比如: –add–(双下划綫) 其实就是对应了算术运算符的+操作符~~

python实现

# -*- coding: utf-8 -*-
"""
Created on Mon Jul 30 09:43:41 2018

@author: xuanxuan
"""

class Rational:
    @staticmethod
    def _gcd(m,n):
        if n==0:
            m,n=n,m
        while m!=0:
            m,n=n%m,m
        return n

    def __init__(self,num,den):

        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)

        self._num=sign*(num//g)
        self._den=den//g

    def num(self):
        return self._num

    def den(self): 
        return self._den

    def __add__(self,another):

        num=self._num*another.den()+self._den*another.num()
        den=self._den*another.den()
        return Rational(num,den)

    def __mul__(self,another):

        return Rational(self._num*another.num(),self._den*another.den())

    def __floordiv__(self,another):

        if another.num()==0:
            raise ZeroDivisionError
        return Rational(self._num*another.den(),self._den*another.num())

    def __eq__(self,another):
        return self._num*another.den()==self._den*another.num()

    def __lt__(self,another):
        return self._num*another.den()def __str__(self):
        return str(self._num)+'/'+str(self._den)

    def print(self):
        print(self._num,'/',self._den)

if __name__=="__main__":

    x=Rational(2,4)
    print("the final result is",Rational(4,5)+x)      

笔记

1.@staticmethod 是在非实例方法之前定义,区别于类中定义的其他实例方法,该非实例方法又称为静态方法,主要是作为一个局部函数来使用,为类中其他的实例方法打辅助的,哈哈哈哈‘

2.其实可以发现类中有两种类型的变量,self.num和num 前者是在整个类中使用的,作为某一个实例对象的变量在类中使用,而num变量其实就是类似于中间变量,为类中其他函数或变量服务的,,,他们之间的区别就好像实例方法和静态方法的区别,不知道理解的对不对~~~

你可能感兴趣的:(python_practice,python_DS)