zoukankan      html  css  js  c++  java
  • python用特殊方法定制类(不全)

    定义在class中不需要直接调用,python的某些函数或操作符会自动的调用对应的特殊方法.

    1、python中 __str__和__repr__

    __str__()用于显示给用户,而__repr__()用于显示给开发人员。__str__是可打印的字符输出,内建str()及print语句

     1 class Person(object):
     2     def __init__(self, name, gender):
     3         self.name = name
     4         self.gender = gender
     5 
     6     def __str__(self):
     7         return '(Person: %s, %s)' % (self.name, self.gender)
     8 
     9     __repr__ = __str__ #直接让repr和str相同
    10 
    11 p=Person('chengjiaxing','femail')
    12 print(p)   #输出(Person: chengjiaxing, femail)
    13  

    2、python中 __cmp__

    为了对对象进行排序,可以使用函数sorted函数,前提是设置了类的__cmp__方法。

     1 class Student(object):
     2     def __init__(self, name, score):
     3         self.name = name
     4         self.score = score
     5     def __str__(self):
     6         return '(%s: %s)' % (self.name, self.score)
     7     __repr__ = __str__
     8  
     9     def __cmp__(self, s):
    10         if self.name < s.name:
    11             return -1
    12         elif self.name > s.name:
    13             return 1
    14         else:
    15             return 0
    16 
    17 >>> L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 77)]
    18 >>> print sorted(L)
    19 [(Alice: 77), (Bob: 88), (Tim: 99)]

    3、python中 __len__

    调用len()返回实例的长度.

    斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。

    请编写一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。

     1 class Fib(object):
     2     def __init__(self,num):
     3         a,b,L=0,1,[]
     4         for n in range(num):
     5             L.append(a)
     6             a,b=b,a+b
     7         self.numbers=L
     8 
     9     def __str__(self):
    10         return str(self.numbers)
    11 
    12     __repr__=__str__
    13 
    14     def __len__(self):
    15         return len(self.numbers)
    16 
    17 
    18 f=Fib(10)
    19 print(f)
    20 print(len(f))

    4、python中类型转换

     1 class Rational(object):
     2     def __init__(self, p, q):
     3         self.p = p
     4         self.q = q
     5 
     6     def __int__(self):
     7         return self.p //self.q
     8 
     9     def __float__(self):
    10         return float(self.p) /float(self.q)
    11 
    12 
    13 print(float(Rational(7, 2)))   #3.5
    14 print(float(Rational(1, 3)))  #0.3333333333333333
    15 print(int(Rational(7,2)))    #3
     

    5、python中运算符重载

     1 class Time60(object):
     2     def __init__(self,hr,min):
     3         self.hr=hr
     4         self.min=min
     5 
     6     def __str__(self):
     7         return '%d:%d'%(self.hr,self.min)
     8 
     9     def __add__(self,other):  #重载 + 操作符
    10         if self.min+other.min >60:
    11             minute=max(self.min,other.min)-min(self.min,other.min)
    12             hr=self.hr+other.hr+1
    13         else:
    14             hr=self.hr+other.hr
    15             minute=self.min+other.min
    16         return self.__class__(hr,minute)
    17         #Time60(hr,minute)
    18 
    19 
    20     def __iadd__(self, other): #重载 += 操作符
    21         if self.min+other.min >60:
    22             self.min=max(self.min,other.min)-min(self.min,other.min)
    23             self.hr=self.hr+other.hr+1
    24         else:
    25             self.hr=self.hr+other.hr
    26             self.min=self.min+other.min
    27         return  self
    28 
    29     __repr__=__str__
    30 
    31 mon=Time60(6,54)
    32 tue=Time60(3,47)
    33 print(mon,tue)     #6:54 3:47
    34 print(mon+tue)    #10:7
    35 mon+=tue
    36 print(mon)            #10:7

     转载:https://www.cnblogs.com/oucsheep/p/6711461.html

  • 相关阅读:
    获取当前android设备是mips架构还是arm架构
    查看android设备的设备名称
    android源码查看源码的版本
    netcfg android
    linux中解压zip 中文乱码处理
    通过命令行查看当前android系统的版本
    关于Yorhom Yorhom's Game Box
    是英雄就下100层(1)
    Javascript可移动地图的实现Demo演示
    HTML5之游戏DEMO Yorhom's Game Box
  • 原文地址:https://www.cnblogs.com/xiongxueqi/p/8583317.html
Copyright © 2011-2022 走看看