第十九天 面向对象 构造函数

面向对象三⼤特征:封装、继承、多态

1.封装


隐藏对象的属性和实现细节,仅对外公开接⼝,控制在程序中属性的读取和修改的访问级别。

类本身就是⼀种封装,通过类可以将数据(属性)和⾏为(⽅法)相结合,形成⼀个有机的整体,也就是将数据与对数据的操作有机的结合。封装的⽬的是增强安全性和简化编程,使⽤者不必了解具体的实现细节,⽽只是要通过外部接⼝,以特定
的访问权限来使⽤类的成员。成员私有化是实现封装的⼿段。所有的成员默认是公有。

1.1 属性私有化

如果想让类的内部属性不被外界直接访问,可以在这个属性的前⾯加两个下划线__,在Python中,如果⼀个属性的前⾯出现 __,就表示这个属性只能在当前类的⽅法中被直接访问,不能通过对象直接访问,这个变量就被称为私有变量

class Dog:
	def __init__(self,name,gender,age):
		self.name = name
		self._gender = gender #'保护'变量
		self.__age = age #私有变量
	#定义⼀个公开的⽅法,间接访问私有变量
	def get_age(self):
		return self.__age
	#定义⼀个公开⽅法,间接设置私有变量
	def set_age(self,age):
		self.__age = age
ding = Dog('丁丁','公',5)
print(ding.name)
# print(ding.__age) #AttributeError: 'Dog' object has no attribute
'__age'
print(ding.get_age()) #5 获取私有属性的值
ding.set_age(10) #设置私有属性的值
print(ding.get_age()) #10
print(ding._gender)

#可以通过 _Dog__age访问私有变量,但不建议
print(ding._Dog__age)

【⾯试题】
常⻅的在变量的前后加下划线的问题:
单下划线:_age ----->受保护的 可以访问,当约定俗称,当你看到⼀个下划线开头
的成员时不应该使⽤它
双下划线:__age ------>私有的
两边都双下划线:__age__ ------->系统内置变量

1.2 属性装饰器

对于私有属性的访问,使⽤公开⽅法间接访问的⽅法太麻烦,python提供了⼀种便捷语法,属性装饰器,通过属性装饰器,可以很⽅便的对私有属性进访问,属性修饰器可以把⽅法属性化。

class Dog:
	def __init__(self,name,gender,age):
		self.name = name
		self._gender = gender
		self.__age = age
	@property
	def age(self):
		return self.__age
	@age.setter
	def age(self,age):
		self.__age =age

ding = Dog('丁丁','公',5)
print(ding.name)
print(ding.age)
ding.age =10
print(ding.age)
print(ding._gender)

1.3 成员方法私有化

如果对⼀个方法的名字前⾯加__,声明该⽅法为私有⽅法,只能在当前类中被调用,在外界不能通过对象直接调⽤,这就是私有方法

class Dog:
	def __init__(self,name,age):
		self.name = name
		self.age = age
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值