python之类方法的重载

Python类的特殊方法

Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。

.1    __init__

类似于构造函数

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def say(self):

print self.name

study = Study("Badboy")

study.say()

.2    __del__

类似于析构函数

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def __del__(self):

print "Iamaway,baby!"

def say(self):

print self.name

study = Study("zhuzhengjun")

study.say()

.3__repr__

使用repr(obj)的时候,会自动调用__repr__函数,该函数返回对象字符串表达式,

用于重建对象,如果eval(repr(obj))会得到一个对象的拷贝。

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def __del__(self):

print "Iamaway,baby!"

def say(self):

print self.name

def __repr__(self):

return "Study(‘jacky‘)"

study = Study("zhuzhengjun")

study.say()

print type(repr(Study("zhuzhengjun"))) # str

print type(eval(repr(Study("zhuzhengjun")))) # instance

study = eval(repr(Study("zhuzhengjun")))

study.say()

.4__str__

Python能用print语句输出内建数据类型。有时,程序员希望定义一个类,要求它的对象也能用print语句输出。Python类可定义特殊方法__str__,为类的对象提供一个不正式的字符串表示。如果类的客户程序包含以下语句:

print objectOfClass

那么Python会调用对象的__str__方法,并输出那个方法所返回的字符串。

#!/usr/local/bin/python

class PhoneNumber:

def __init__(self,number):

self.areaCode=number[1:4]

self.exchange=number[6:9]

self.line=number[10:14]

def __str__(self):

return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line)

def test():

newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n")

phone=PhoneNumber(newNumber)

print "The phone number is:"

print phone

if__name__=="__main__":

test()

方法__init__接收一个形如"(xxx) xxx-xxxx"的字符串。字符串中的每个x都是电话号码的一个位数。方法对字符串进行分解,并将电话号码的不同部分作为属性存储。

方法__str__是一个特殊方法,它构造并返回PhoneNumber类的一个对象的字符串表示。解析器一旦遇到如下语句:

print phone

就会执行以下语句:

print phone.__str__()

程序如果将PhoneNumber对象传给内建函数str(如str(phone)),或者为PhoneNumber对象使用字符串格式化运算符%(例如"%s"%phone),Python也会调用__str__方法。

.5__cmp __

比较运算符,0:等于 1:大于 -1:小于

class Study:

def __cmp__(self, other):

if other > 0 :

return 1

elif other < 0:

return - 1

else:

return 0

study = Study()

if study > -10:print ‘ok1‘

if study < -10:print ‘ok2‘

if study == 0:print ‘ok3‘

打印:ok2 ok3

说明:在对类进行比较时,python自动调用__cmp__方法,如-10 < 0 返回 -1,也就是说study 应该小与 -10,估打印ok2

.6__getitem__

__getitem__ 专用方法很简单。象普通的方法 clear,keys 和 values 一样,它只是重定向到字典,返回字典的值。

class Zoo:

def __getitem__(self, key):

if key == ‘dog‘:return ‘dog‘

elif key == ‘pig‘:return  ‘pig‘

elif key == ‘wolf‘:return ‘wolf‘

else:return ‘unknown‘

zoo = Zoo()

print zoo[‘dog‘]

print zoo[‘pig‘]

print zoo[‘wolf‘]

打印 dog pig wolf

.7__setitem__

__setitem__ 简单地重定向到真正的字典 self.data ,让它来进行工作。

class Zoo:

def __setitem__(self, key, value):

print ‘key=%s,value=%s‘ % (key, value)

zoo = Zoo()

zoo[‘a‘] = ‘a‘

zoo[‘b‘] = ‘b‘

zoo[‘c‘] = ‘c‘

打印:

key=a,value=a

key=b,value=b

key=c,value=c

.8 __delitem__

__delitem__ 在调用 del instance[key] 时调用 ,你可能记得它作为从字典中删除单个元素的方法。当你在类实例中使用 del 时,Python 替你调用 __delitem__ 专用方法。

class A:

def __delitem__(self, key):

print ‘delete item:%s‘ %key

a = A()

del a[‘key‘]

运算符重载

和c++一样,Python也可以对运算符进行重载。可以重载的方法如下表所示。

Method Overloads Call for
init 构造函数 X=Class()
del 析构函数 对象销毁
repr 打印转换 print X,repr(X)
str 打印转换 print X,str(X)
call 调用函数 X()
getattr 限制 X.undefine
setattr 取值 X.any=value
getitem 索引 X[key],For If
setitem 索引 X[key]=value
len 长度 len(X)
iter 迭代
For In

add + X+Y,X+=Y
sub - X-Y,X-=Y
mul XY
radd 右加+ +X
iadd += X+=Y
or | X|Y,X|=Y
cmp 比较 == X==Y,X
lt 小于< X
eq 等于= X=Y
class Number(object):
def __init__(self, value):
self.value = value
# 加重载
def __add__(self, other):
return Number(self.value + other.value)
# 打印重载
def __str__(self):
return 'The value is %d.' % self.value
# 比较重载
def __cmp__(self, other):
return cmp(self.value, other.value)
>>> x = Number(1)
>>> y = Number(2)
>>> print x + y
The value is 3.
>>> x > y
False
>>> x < y
True               

参考文献:

http://5ydycm.blog.51cto.com/115934/157548

http://wuyuans.com/2013/05/python-class/

时间: 2024-10-30 13:43:10

python之类方法的重载的相关文章

(一)Python入门-6面向对象编程:05方法没有重载-方法的动态性

一:方法没有重载 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可.方法签名包含 3 个部分:方法名.参数数量.参数类型. Python中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由 可变参数控制.因此,Python中是没有方法的重载的.定义一个方法即可有多种调用方式, 相当于实现了其他语言中的方法的重载. 如果我们在类体中定义了多个重名的方法,只有最后一个方法有效. 建议:不要使用重名的方法!Python中方法没有重载. [操作] #Python中没有方

python面向对象-4类的继承与方法的重载

1.类的继承与方法的重载 上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法. 1 class Washer: 2 company='ZBL' 3 def __init__(self,water=10,scour=2): 4 self._water=water #不想让用户直接访问实例变量,可以标志成私有 5 self.scour=scour 6 self.year=2000#这是生产日期 7 #属性包装,将water属性包装成方法,用户使用water

Python中的操作符重载

类可以重载python的操作符 操作符重载使我们的对象与内置的一样.__X__的名字的方法是特殊的挂钩(hook),python通过这 种特殊的命名来拦截操作符,以实现重载. python在计算操作符时会自动调用这样的方法,例如: 如果对象继承了__add__方法,当它出现在+表达式中时会调用这个方法.通过重载,用户定义的对 象就像内置的一样. 在类中重载操作符 1.操作符重载使得类能拦截标准的python操作. 2.类可以重载所有的python的表达式操作符. 3.类可以重载对象操作:prin

Python 3 之 运算符重载详解

基础知识 实际上,"运算符重载"只是意味着在类方法中拦截内置的操作--当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果.以下是对重载的关键概念的复习: 运算符重载让类拦截常规的Python运算. 类可重载所有Python表达式运算符 类可以重载打印.函数调用.属性点号运算等内置运算 重载使类实例的行为像内置类型. 重载是通过特殊名称的类方法来实现的. 换句话说,当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Pyt

Python list方法总结

1.向列表的尾部添加一个新的元素 append(...) L.append(object) -- append object to end >>> a = ['sam',24,'shaw'] >>> a.append('35') >>> a ['sam', 24, 'shaw', '35'] 2.查找list中有多少个value count(...) L.count(value) -> integer -- returnnumber of occ

构造方法和方法的重载。

---恢复内容开始--- 构造器,又称为构造方法.constructor 构造器用于构造该类的实例. 格式: [修饰符] 类名(形参列表){ //n条语句 } 是一种特殊的方法: 1.通过new关键字调用 2.构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能字啊构造器里调用return. 3.如果我们没有定义构造器,则系统u会自动定义一个无参的构造函数.如果已定义则编译器不会添加! 4.构造器的方法名必须和类名一致! 5.构造该类的对象,经常也用来初始化对象的属性. --

方法的重载

方法的重载 (overload) 1.定义 : 在同一类中,相同的方法名,不同的参数列表之间,彼此构成重载! 举例:Arrays中的sort(Xxx[] xxx) / System.out.println(Xxx xxx) 总结:"两同一不同". 一不同:①参数个数不同 ② 参数类型不同 2.方法的重载与否与方法的形参的变量名没关系!与方法是否返回值也没关系! 3.如何确定调用的是一个类的具体的哪个方法?指明方法名--->指明参数的类型 面试题:区分方法的重载(overload)

详解java方法的重载

1.方法的重载: 方法名相同,参数列表不同就叫做方法的重载. 2.怎样正确区分方法是不同的方法: 1.看方法名名是否相同,方法名不同即为不同的方法 2.看参数列表是否相同.参数列表的不同分为两部分:a. 参数个数不同 b.参数的数据类型不同. 注意: a.方法的重载和返回值/修饰符列表无关. b.如果方法名相同,参数列表相同,则此方法是重复的,是个错误. 3.方法的执行原理: 方法不调用不执行,一调用才执行,调用的结果返回到方法的调用处. 4.从内存数据结构分析方法的调用: 方法在调用的时候,才

C#值参数和引用参数,方法的重载,foreach,数组,以及ref和out的用法

1.方法的传输传递 值参数:传递的是副本 引用参数:自身 保留自定义的方法中对值的改变 形参影响实参ref:对应的形参和实参都用ref修饰 输出参数:实参不用赋值,但是自定义方法内必须对此参数赋值!!! 把自定义方法产生的结果带回调用处out:对应的形参和实参都用out修饰 必须在自定义方法中赋值 注:如果需要返回一个参数 使用return 如果需要反回多个参数 使用ref 或者 out TryParse用法:自行判断转换是否成功 转换成功反回true 转换失败返回false 例: bool f