网站首页 > 文章中心 > 其它

python函数如何重载_Python重载运算符

作者:小编 更新时间:2023-08-11 23:14:36 浏览量:253人看过

python类的继承和单例模式 singleton、运算符重载

@[toc]

全局只有一个实例

继承其他类的类称为派生类(derived class)

被其他类继承的类称为这些类的基类(base

class)

多继承会导致菱形 diamond关系:有至少一个基类可以从子类经由多个继承路径到达

python函数如何重载_Python重载运算符-图1

基类方法可能被多次调用

防止重复访问,每个基类只调用一次

通过子类实例对象课调用父类已被覆盖

慎用多继承(二义性)

– 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

– 运算符重载不能改变其本来寓意

– 运算符重载只是一种 "语法上的方便" (sugar)

– 是一种函数调用的方式

python函数如何重载_Python重载运算符-图2

怎么理解Python中重载?通俗理解是

python里面没有重载吧?

正常的重载说的应该是函数方法的重载,即两个函数的名称相同但是参数不同是重载,会出现重载的情况一般是函数实现相同功能时,遇到参数类型可能不同的情况,会出现重载,如比较常见的对于加法的实现,如果输入两个整数相加则直接使用整数加法,如果两个字符串相加则使用字符串的拼接.输入的参数类型不同,其实是两个不同的函数,这在那种强类型语言中是可以利用函数重载来实现的,而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()

类似于析构函数

def __del__(self):

print "Iamaway,baby!"

study = Study("zhuzhengjun")

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

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

def __repr__(self):

return "Study('jacky')"

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

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

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

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

print objectOfClass

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

class PhoneNumber:

def __init__(self,number):

def __str__(self):

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

def test():

phone=PhoneNumber(newNumber)

print "The phone number is:"

print phone

if__name__=="__main__":

test()

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

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

就会执行以下语句:

print phone.__str__()

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

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

def __cmp__(self, other):

if other 0 :

return 1

elif other 0:

return - 1

else:

return 0

study = Study()

if study -10:print 'ok1'

__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

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

def __setitem__(self, key, value):

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

zoo['a'] = 'a'

zoo['b'] = 'b'

zoo['c'] = 'c'

打印:

key=a,value=a

key=b,value=b

key=c,value=c

python函数如何重载_Python重载运算符-图3

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

class A:

def __delitem__(self, key):

print 'delete item:%s' %key

a = A()

del a['key']

关于python的重载问题

没有重载,但是可以有默认参数和不定长参数,可以判断默认值和参数长度来处理.

比如:

def range(start, end = -1):

if end == -1:

end = start

start = 0

def range(*args):

if len(args) == 1:

end = args[0]

start, end = args[0], args[1]

以上就是土嘎嘎小编为大家整理的python函数如何重载相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章