Python基础12 - 面向对象、封装、装饰器

八、面向对象

4、特殊方法 init

  • __init__( )

__init__是用于初始化属性,
在对象创建后方法自动执行初始化属性,不需要手动去调用;

示例1class A():
	def __init__(self,name):
		self.name = '张三'
c = A()
print(c.name)

>> 张三

5、 封装

5.1、封装

封装是为了提高程序数据的安全,把数据的属性隐藏,不让外部发现的方法;
封装是面向对象的三大特性之一

5.1.1、封装方法一

较弱的封装方法,把属性名改成一些难以看透的名字

示例1class ClassName():
	def __init__(self, Humiliator_name):
		self.Humiliator_name

5.1.2、封装方法二

在类中定义2个方法,一个方法用来获取属性,一个方法用来修改属性
getter()setter() 方法

通过 getter 可以获取属性值
通过 setter 可以修改属性值

示例1class ClassName():
	def __init__(self, name):
		self.name = name
	def get_name(self):
		return self.name
	def set_name(self,name):
		self.name = name
c = ClassName('张三')
print(c.get_name())
c.set_name('李四')
print(c.get_name())

>> 张三
>> 李四
5.1.3、封装方法三

在定义属性时,在名字前加双下划线

双下划线开头的属性,是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过对象访问
隐藏属性只不过是Python自动帮属性修改了一个名字
实际上将名字修改为 _类名_属性名

示例1class ClassName():
	def __init__(self, name):
		self.__name = name
	def get_name(self):
		return self.__name
	def set_name(self,name):
		self.__name = name

c = ClassName('李四')
'''
print(c.__name) 	'ClassName' object has no attribute '__name'
如果直接通过对象点属性问是无法访问该属性的,会报错
'''
print(c._ClassName__name)
# 根据系统修改后的名字一样可以找到该属性
>> '李四'

6、 方法装饰器

在方法前面@列出装饰 (与函数装饰器一样)

6.1、property装饰器

property装饰器 用来创建只读属性,会将方法转换为相同名字的只读属性
相当于把方法转换为 getter 方法

语法:
@property
def fnName():
	pass
示例1class ClassName():
	def __init__(self,name):
		self._name = name
	@property
	def name(self):
		return self._name
c = ClassName("李四")
print(c.name)

>> 李四
6.2、setter装饰器

setter装饰器相当于把方法转换为setter方法

语法:
@方法名.setter
def 方法名():
	pass
示例1class ClassName():
	def __init__(self,name):
		self._name = name
	@property
	def name(self):
		return self._name
	@name.setter
	def name(self,name):
		self._name = name
c = ClassName("李四")
print(c.name)
c.name = '张三'
print(c.name)

>> 李四
>> 张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值