zoukankan      html  css  js  c++  java
  • Python 中的类的相关操作

    构造函数

    构造函数是任何类都有的特殊方法。当要创建一个类时,就要调用构造函数。他的名字是__init__。init的前后分别是两个下划线。时间类Time的构造函数如下:

    >>> class Time:
    ...     def __init__(self , hours = 0 , minutes = 0 , seconds = 0):
    ...         self.hours = hours;
    ...         self.mintues = minutes;
    ...         self.seconds = seconds;
    ...         
    ...     def printTime(self):
    ...         print str(self.hours)
    ...         
    ...     
    ... 
    >>> now = Time(12,12,43)
    >>> now
    <__main__.Time instance at 0x1783cf8>
    >>> now.printTime()
    12
    >>> 


    操作符重定义

    >>> class RMB:
    ...     def __init__(self,sum = 0.0):
    ...         self.sum = sum;
    ...         
    ...     def __str__(self):
    ...         return str(self.sum);
    ...         
    ...     
    ... 
    >>> a = RMB()
    >>> b = RMB()
    >>> a + b
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'instance' and 'instance'
    >>


    我们定义了一个RMB类,然后生成两个实例,这两个实例相加后,显示了一条错误信息,表示实例不能进行相加操作。错误信息的意思是,加发操作暂时不支持两个实例操作数。

    为了使类的实例也可以进行数学操作,我们需要在类的内部重定义新定义的数学操作符,使之支持用户定义的数据类型。很多人会立即意识到这不是C++中的操作符重载吗?在这里我们没有重载这个词。因为C++中的重载比Python中的重定义的概念范围要广的很多,因此,我们使用重定义这个词。下面我们修改这个RMB的类添加__add__ 和__sub__操作

    >>> class RMB:
    ...     def __init__(self , sum = 0.0):
    ...         self.sum = sum;
    ...         
    ...     def __str__(self):
    ...         return str(self.sum);
    ...         
    ...     def __add__(self , other):
    ...         return RMB(self.sum + other.sum);
    ...         
    ...     def __sub__(self,other):
    ...         return RMB(self.sum - other.sum);
    ...         
    ...     
    ... 
    >>> a = RMB(100)
    >>> b = RMB(343)
    >>> a + b
    <__main__.RMB instance at 0x1783e60>
    >>> print a + b
    443
    >>> print a.__add__(b) , a + b
    443 443
    >>> 


  • 相关阅读:
    [译]微服务-Martin Fowler(转)
    SpringBoot注解最全详解(整合超详细版本)(转)
    操作系统中的句柄是什么?(转)
    用户态和核心态(转)
    进程、线程、协程(转)
    IO中同步与异步,阻塞与非阻塞区别(转)
    HTML5常见的取值与单位
    C++实现词法分析器
    用C语言编写一个简单的词法分析程序
    Java面向对象详解
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3196767.html
Copyright © 2011-2022 走看看