如何访问私有成员

# ### 如何访问私有成员
class Plane():
	# 公有属性
	captain = "马军强"
	# 私有属性
	__air_sister = "20个"

	# 公有绑定方法
	def fly(self):
		print("飞机会飞")
	
	# 公有普通方法
	def fly2():
		print("飞机会飞2")
		
	# 私有的绑定方法
	def __oil_info(self):
		print("飞机百公里油耗是100升")
		
	# 私有的普通方法
	def __oil_info2():
		print("飞机百公里油耗是100升")
		
	# 公有的绑定方法
	def pub_info(self):
		print(self.__air_sister)
		self.__oil_info()
		
	# 公有的普通方法
	def pub_info2():
		print(Plane.__air_sister)
		Plane.__oil_info2()
		
		
# (1)如何访问类的私有成员?
'''
利用公有方法调用类内的私有成员
私有成员在本类之内可以随便调用,在本类之外不能调用
'''
# 实例化对象 方法一
obj = Plane()
obj.pub_info()

# 也可以使用类来调用 方法二
Plane.pub_info2()

# (2)如果就想直接在类外调用私有成员,有办法么?
'''
私有成员的改名策略:	
_类名 + 私有成员  (没有真正的私有化,类外可以通过改名策略仍然调取.)
'''
print("<===>")
print(obj._Plane__air_sister)
Plane._Plane__oil_info2()
	

# ### 如何删除成员
# (1)实例化的对象删除公有成员属性和方法
obj = Plane()
print(obj.__dict__)
print(obj.captain)
'''
captain 成员属性归属于class Plane的,不是obj的
obj可以有使用权,没有所有权(不能够修改或者删除类内的属性)
如果对象有该属性方法,先优先调用该对象里面的成员,
如果没有,在调用类中的成员属性和方法
如果都没有,直接报错.
'''
# 删除对象的属性
obj.captain = "熊卫华"
print(obj.__dict__)
print(obj.captain)
del obj.captain
print(obj.captain) # obj自己的captain 被删除了

# 删除对象的方法
print("<======>")
obj.fly111222 = lambda : print("我的飞机可以潜入海底")
obj.fly111222()
print(obj.__dict__)
# del obj.fly
# print(obj.__dict__)
	
	
# (2)定义的类删除公有成员属性和方法
'''
对象可以调用类中得公有成员属性方法
类不能调用对象的相关成员属性和方法
方向不可逆.
一个类可以产生多个对象,多个对象彼此之间,数据独立
'''
# 删除类的成员属性
# del Plane.captain
# print(Plane.captain)
# print(obj.captain)
# Plane.fly111222() error  类不能调用对象的方法

# 删除类的成员方法
# del Plane.pub_info
# Plane.pub_info() error  不存在

  

猜你喜欢

转载自www.cnblogs.com/huangjiangyong/p/10920558.html