python多态与封装

python多态多态与封装


类的三大特性之二——多态,封装


多态

python不检查传入对象的类型(str,int等)——不对参数类型做检验,使用起来更自由。

>>> def add(x,y):
	return x+y

>>> add(3,5)
8
>>> add("xianyu","jun")
'xianyujun'
>>> 

我们日常中无意间就用到了多态~
有什么用呢?——(以封装和继承为前提)不同的子类调用相同的方法,产生不同的结果

注意:类型检查是毁掉多态的利器,如type,isinstance等等.所以要慎用这个类型检查函数

封装和私有化

封装:python就是实现对某些方法和属性的“私有化”,将其应用权限限制在某个区域之内,外部无法调用~。
语法:

class XX:
	__name	#双下划线+对象名字

实例:

>>> class Foo:
	__name = "xianyu"
	age =  66

	
>>> f = Foo()
>>> dir(f)
['_Foo__name', '__class__', ..., 'age']
>>> 

在类中有2个类属性, 一个私有属性,一个普通的。使用dir()查看,发现其中只有age属性,没有__name属性

尝试调用可以看到,实例化对象调用属性

>>> f.age
66
>>> f.__name
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    f.__name
AttributeError: 'Foo' object has no attribute '__name'
>>> 

可以看到 __name 类属性无法在外面被调用,这说明属性被“私有化”了。

具体怎么用?

>>> class XY:
	def __init__(self):
		self.a = "qq"
		self.__b = "aa"
	def __p(self):             # 1  私有方法只能在此类中调用。
		print("holle world")
	def ok(self):
		print("are you ok?")
		self.__p()              #2   都在一起可以掉用  1
		
>>> e = XY()
>>> e.ok()
are you ok?
holle world
>>> print(e.a)
qq
>>> print(e.__b)          # 私有方法外部不能调用呀
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    print(e.__b)
AttributeError: 'XY' object has no attribute '__b'
>>> e.__p()              # 一样 我还是用不了
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    e.__p()
AttributeError: 'XY' object has no attribute '__p'

OK 知道这么回事就行,后面案例再说。

相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页