python方法重写的好处_python学习笔记之---重写与重载

重写

重写是指子类重写父类的成员方法。子类可以改变父类方法所实现的功能, 但子类中重写的方法必须与父类中对应的方法具有相同的方法名。也就是说 要实现重写,就必须存在继承。

#重写:子类实现父类的同名方法。

实例1:

classPerson():defprint_info(self):print("*************")classChinesePerson(Person):defprint_info(self): #子类重写父类的print_info方法print("________")

p=ChinesePerson() #子类实例

p.print_info() #子类调用重写方法

p1=Person() #父类实例

p1.print_info() #父类调用重写方法

E:\>py -3 a.py

________

*************

实例2:

classPerson():def __init__(self,name):

self.name=namedefget_name(self):returnself.namedefset_name(self,name):if len(name)>5:returnself.name=nameclassChinesePeople(Person):def __init__(self,name,nation):

Person.__init__(self,name)

self.nation=nationdefget_nation(self):returnself.nationdefset_nation(self,nation):

self.nation=nationdefset_name(self,name):if len(name)>10:returnself.name=name

p= ChinesePeople("李老师","汉")

p.set_name("abcdehed1111")print(p.name)

p.set_name("ab")print(p.name)

E:\>py -3 a.py

李老师

ab

#如果想在子类里面调用父类的同名方法:

classPerson():def __init__(self,name):

self.name=namedefget_name(self):returnself.namedefset_name(self,name):if len(name)>5:returnself.name=nameclassChinesePeople(Person):def __init__(self,name,nation):

Person.__init__(self,name)

self.nation=nationdefget_nation(self):returnself.nationdefset_nation(self,nation):

self.nation=nationdefset_name(self,name):

#子类中明确的调用父类中被重写的方法

Person.set_name(self,name)#写法一

#super(ChinesePeople,self).set_name(name) #写法二

#super.set_name() #写法三

p= ChinesePeople("吴老师","汉")

p.set_name("abcd")print(p.name)

E:\>py -3 a.py

abcd

#运算符重写

实例:

#coding=utf-8

classVector(object) :def __init__(self, a, b) :

self.a=a

self.b=bdef __str__(self):return 'Vector (%d, %d)' %(self.a, self.b)def __add__(self,other) :return Vector(self.a + other.a, self.b +other.b)

x= Vector(3,7)

y= Vector(1, -10)print (x +y)print (str(x))

C:\Users\dell\Desktop\练习\6>py -3 0609.py

Vector (4, -3)

Vector (3, 7)

重载

重载方法的名称是相同的,但在方法的声明中一定要有彼此不相同的成

份,以使编译器能够区分这些方法。重载的方法必须遵循下列原则:

➢方法的参数必须不同,包括参数的类型或个数,以此区分不同方法

体;

➢方法的返回类型、修饰符可以相同,也可以不同。

实例:两个同名的函数,传参不同

defa(x):returnxdefa(x,y):return x+yprint(a(1,2))print(a(1))

C:\Users\dell\Desktop\练习\6>py -3 0609.py

3

Traceback (most recent call last):

File "0609.py", line 8, in

print(a(1))

TypeError: a() missing 1 required positional argument: 'y'

总结:python是没有重载的,第二个同名的函数会把第一个覆盖掉

第一因为python没有类型,第二python有可变参数

重写:把父类的方法覆盖掉,使用子类的同名方法。

重载:多个方法名一样,但是他们的参数类型,还有参数个数不一样(java)。

python不支持重载,因为python可以传可变参数,也没有参数类型的定义。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值