资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

python中函数重载 python函数重载机制

python 有没有方法的重载

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

创新互联是一家专注于网站建设、成都网站建设与策划设计,平桥网站建设哪家好?创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:平桥等地区。平桥做网站价格咨询:13518219792

.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']

关于python的重载问题

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

比如:

def range(start, end = -1):

if end == -1:

end = start

start = 0

def range(*args):

if len(args) == 1:

start = 0

end = args[0]

elif len(args) == 2:

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

简述python面向对象编程中函数重载和重写的区别

这个基本是没有一点关联。。。只是名字容易混淆而已 重写就是对父类的方法重写,改变方法体中的语句。。。。 重载就是同一个函数名,参数个数、类型、排列顺序不同,jvm根据参数来决定调用哪一个方法

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

python里面没有重载吧?

正常的重载说的应该是函数方法的重载,即两个函数的名称相同但是参数不同是重载,会出现重载的情况一般是函数实现相同功能时,遇到参数类型可能不同的情况,会出现重载,如比较常见的对于加法的实现,如果输入两个整数相加则直接使用整数加法,如果两个字符串相加则使用字符串的拼接。输入的参数类型不同,其实是两个不同的函数,这在那种强类型语言中是可以利用函数重载来实现的,而python中函数类型是动态的各种各样的,所以不需要重载这个机制。相同函数名就是表示同一个方法。

为什么 Python 不支持函数重载

python里面不需要重载

参数个数, python 支持 args = None 等参数default 值,也支持 *args **kw 等不限制的参数个数。

参数类型,在python里面,变量都是无类型的,看你怎么用

以上个人观点,供参考

Python正确重载运算符的方法示例详解

Python正确重载运算符的方法示例详解

说到运算符重载相信大家都不陌生,运算符重载的作用是让用户定义的对象使用中缀运算符(如 + 和 |)或一元运算符(如 - 和 ~)。说得宽泛一些,在 Python 中,函数调用(())、属性访问(.)和元素访问 / 切片([])也是运算符。

我们为 Vector 类简略实现了几个运算符。__add__ 和 __mul__ 方法是为了展示如何使用特殊方法重载运算符,不过有些小问题被我们忽视了。此外,我们定义的Vector2d.__eq__ 方法认为 Vector(3, 4) == [3, 4] 是真的(True),这可能并不合理。下面来一起看看详细的介绍吧。

运算符重载基础

在某些圈子中,运算符重载的名声并不好。这个语言特性可能(已经)被滥用,让程序员困惑,导致缺陷和意料之外的性能瓶颈。但是,如果使用得当,API 会变得好用,代码会变得易于阅读。Python 施加了一些限制,做好了灵活性、可用性和安全性方面的平衡:

不能重载内置类型的运算符

不能新建运算符,只能重载现有的

某些运算符不能重载——is、and、or 和 not(不过位运算符

、| 和 ~ 可以)

前面的博文已经为 Vector 定义了一个中缀运算符,即 ==,这个运算符由__eq__ 方法支持。我们将改进 __eq__ 方法的实现,更好地处理不是Vector 实例的操作数。然而,在运算符重载方面,众多比较运算符(==、!=、、、=、=)是特例,因此我们首先将在 Vector 中重载四个算术运算符:一元运算符 - 和 +,以及中缀运算符 + 和 *。

一元运算符

-(__neg__)

一元取负算术运算符。如果 x 是 -2,那么 -x == 2。

+(__pos__)

一元取正算术运算符。通常,x == +x,但也有一些例外。如果好奇,请阅读“x 和 +x 何时不相等”附注栏。

~(__invert__)

对整数按位取反,定义为 ~x == -(x+1)。如果 x 是 2,那么 ~x== -3。

支持一元运算符很简单,只需实现相应的特殊方法。这些特殊方法只有一个参数,self。然后,使用符合所在类的逻辑实现。不过,要遵守运算符的一个基本规则:始终返回一个新对象。也就是说,不能修改self,要创建并返回合适类型的新实例。

对 - 和 + 来说,结果可能是与 self 同属一类的实例。多数时候,+ 最好返回 self 的副本。abs(...) 的结果应该是一个标量。但是对 ~ 来说,很难说什么结果是合理的,因为可能不是处理整数的位,例如在ORM 中,SQL WHERE 子句应该返回反集。

def __abs__(self):

return math.sqrt(sum(x * x for x in self))

def __neg__(self):

return Vector(-x for x in self) #为了计算 -v,构建一个新 Vector 实例,把 self 的每个分量都取反

def __pos__(self):

return Vector(self) #为了计算 +v,构建一个新 Vector 实例,传入 self 的各个分量

x 和 +x 何时不相等

每个人都觉得 x == +x,而且在 Python 中,几乎所有情况下都是这样。但是,我在标准库中找到两例 x != +x 的情况。

第一例与 decimal.Decimal 类有关。如果 x 是 Decimal 实例,在算术运算的上下文中创建,然后在不同的上下文中计算 +x,那么 x!= +x。例如,x 所在的上下文使用某个精度,而计算 +x 时,精度变了,例如下面的


本文题目:python中函数重载 python函数重载机制
标题URL:http://www.cdkjz.cn/article/dodoipo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220