python面向对象三大特性:封装,继承,多态

面向编程三大特性:封装(隐藏),继承,多态。

一. 封装

通过私有属性,私有方法的方式实现封装。

二. 继承

python支持多重继承,一个之类可以继承多个父类。

class  子类类名(父类1,父类2,…):
    类体
    父类名.__init__(self,参数列表)

1.成员继承:子类继承了父类除构造方法之外的所有成员。

2.方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类中的方法,也称为重写。

通过类的方法**dir()**查看对象属性
重写__str__方法:

用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮助我们查看对象的信息。_str_()可以重写。

三. 多态

多态是指同一个方法调用,由于对象不同可能会产生不同的行为。
1.多态是方法的多态,属性没有多态

2.多态的存在有两个必要条件:继承、方法重写

class Man:
    def eat(self):
        print("饿了,吃饭了!")
class Chinese(Man):
    def eat(self):
        print("中国人用筷子吃饭")

class English(Man):
    def eat(self):
        print("英国人用刀叉吃饭")

值得注意的是,python的多态和C++的多态是不一样的。在C++中,多态的目的则是为了接口重用。也就是说,不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。也就是说,C++会对传入的参数类型等进行判断来确定使用子类还是父类的方法。python只有重写,并不能对传入的参数类型进行判断。

class Operator():
	def add(self, a, b):
		if b == 0:
			return a 
		sum = a ^ b
		carry = (a & b) << 1
		return self.add(sum, carry)
	
class StringOperator(Operator):
	def __init__(self):
		Operator.__init__(self)
	
	def add(self, a, b):
		return "".join([a,b])
		
def test():
	a = 1
	b = 2
	op = StringOperator()
	print(op.add(a,b))
test()

运行报错:

    return "".join([a,b])
TypeError: sequence item 0: expected str instance, int found

也就是,python如果子类重写方法,就调用子类的方法,不会进行参数的类型判断等。

但,我们知道python的 + 号是可以同时处理,int型, str 型,实现原理很简单。就是 int 型和 str 型的实例属于不同的object,类本身会定义 __add__ 方法去实现。也就是说, int 型的object用他内置的__add__方法, str型也一样。


参考:

  1. Python面向对象三大特性
  2. 关于Python的封装,继承、多态、重写
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosefunR

你的赞赏是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值