
正文
函数重写python 函数重写和重载的区别
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
简述python面向对象编程中函数重载和重写的区别
这个基本是没有一点关联。。。只是名字容易混淆而已 重写就是对父类的方法重写,改变方法体中的语句。。。。 重载就是同一个函数名,参数个数、类型、排列顺序不同,jvm根据参数来决定调用哪一个方法
相关问答
Q1: python为什么要重写new方法
Python重写new方法是为了支持Python类的实例化过程。Python中的new方法是一个特殊的静态方法,用于为一个类初始化实例。它接收一个类作为参数,并返回一个实例。
在Python中,每个类都有一个new方法,它是在__new__方法内部实现实例化过程的关键步骤。这个方法是静态的,它可以接收类参数并返回一个实例。换句话说,__new__方法负责创建实例,而__init__方法负责初始化实例。
在Python中,重写new方法的一个重要原因是,当你定义一个类时,你可以通过重写__new__方法来实现一个特殊的实例化过程,比如使用一个工厂函数,或者创建一个不同类型的实例,而不仅仅是返回一个新的实例。
此外,重写new方法还有一个重要的原因是,它可以提供像Java中的构造器一样的行为,使得实例化过程的可控性更强。例如,你可以通过重写__new__方法来检查参数,以确保传入的参数是正确的,并且可以定义一个特殊的实例化过程,而不仅仅是返回一个新的实例。
因此,重写new方法可以让你更好地控制实例化过程,并且可以实现一些特殊的实例化行为。它也可以提供一种更好的方式来检查参数,以确保传入的参数正确,从而提高程序的健壮性和可维护性。
Q2: python的三大特征
第一点:封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,在Python中用双下线开头的方式将属性设置成私有的。
拥有三个好处:将变化隔离,便于使用,提高复用性,提高安全性。
第二点:继承
继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又被称为基类或超类,新建的类称为派生类或子类。即一个派生类继承基类的字段和方法,继承也允许把一个派生类的对象作为一个基类对象对待。
第三点:多态
一种事物的多种体现形式,函数的重写其实就是多态的一种体现。Python中,多态指是父类的引用指向子类的对象。
实现多态的步骤:
1. 定义新的子类;
2. 重写对应的父类方法;
3. 使用子类的方法直接处理,不调用父类的方法;
多态的好处:
1. 增加了程序的灵活性;
2. 增加了程序的可扩展性。
Q3: python怎么重写集合方法
class Set(object):
def __init__(self,data=None):
if data == None:
self.__data = []
else:
if not hasattr(data,'__iter__'):
#提供的数据不可以迭代,实例化失败
raise Exception('必须提供可迭代的数据类型')
temp = []
for item in data:
#集合中的元素必须是可哈希
hash(item)
if not item in temp:
temp.append(item)
self.__data = temp
#析构函数
def __del__(self):
del self.__data
#添加元素,要求元素必须可哈希
def add(self, other):
hash(other)
if other not in self.__data:
self.__data.append(other)
else:
print('元素已存在,操作被忽略')
#删除元素
def remove(self,other):
if other in self.__data:
self.__data.remove(other)
print('删除成功')
else:
print('元素不存在,删除操作被忽略')
#随机弹出并返回一个元素
def pop(self):
if not self.__dat:
print('集合已空,弹出操作被忽略')
return
import random
item = random.choice(self.__data)
self.__data.remove(item)
return item
#运算符重载,集合差集运算
def __sub__(self, other):
if not isinstance(other,Set):
raise Exception('类型错误')
#空集合
result = Set()
#如果一个元素属于当前集合而不属于另一个集合,添加
for item in self.__data:
if item not in other.__data:
result.__data.append(item)
return result
#提供方法,集合差集运算,复用上面的代码
def difference(self,other):
return self - other
#|运算符重载,集合并集运算
def __or__(self, other):
if not isinstance(other,Set):
raise Exception('类型错误')
result = Set(self.__data)
for item in other.__data:
if item not in result.__data:
result.__data.append(item)
return result
#提供方法,集合并集运算
def union(self,otherSet):
return self | otherSet
#运算符重载,集合交集运算
def __and__(self, other):
if not isinstance(other,Set):
raise Exception('类型错误')
result = Set()
for item in self.__data:
if item in other.__data:
result.__data.append(item)
return result
#^运算符重载,集合对称差集
def __xor__(self, other):
return (self-other) | (other-self)
#提供方法,集合对称差集运算
def symetric_difference(self,other):
return self ^ other
#==运算符重载,判断两个集合是否相等
def __eq__(self, other):
if not isinstance(other,Set):
raise Exception('类型错误')
if sorted(self.__data) == sorted(other.__data):
return True
return False
#运算符重载,集合包含关系
def __gt__(self, other):
if not isinstance(other,Set):
raise Exception('类型错误')
if self != other:
flag1 = True
for item in self.__data:
if item not in other.__data:
#当前集合中有的元素不属于另一个集合
flag1 = False
break
flag2 = True
for item in other.__data:
if item not in self.__data:
#另一集合中的元素不属于当前集合
flag2 = False
break
if not flag1 and flag2:
return True
return False
#=运算符重载,集合包含关系
def __ge__(self, other):
if not isinstance(other,Set):
raise Exception('类型错误')
return self == other or self other
#提供方法,判断当前集合是否为另一个集合的真子集
def issubset(self,other):
return selfother
#提供方法,判断当前集合是否为另一集合的超集
def issuperset(self,other):
return self other
#提供方法,清空集合所有元素
def clear(self):
while self.__data:
del self.__data[-1]
print('集合已清空')
#运算符重载,使得集合可迭代
def __iter__(self):
return iter(self.__data)
#运算符重载,支持in运算符
def __contains__(self, item):
return item in self.__data
#支持内置函数len()
def __len__(self):
return len(self.__data)
#直接查看该类对象时调用该函数
def __repr__(self):
return '{'+str(self.__data)[1:-1]+'}'
#使用print()函数输出该类对象时调用该函数
__str__ = __repr__
Q4: python 重写xml文件, 空元素多空格问题
Python 只有在排序Elements时才会加空格,其他时候并不会加。
notebook name="math notes" date="2010"/
!--
排序后加空格。
--
notebook date="2010" name="math notes" /
关于函数重写python和函数重写和重载的区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






