目录
八、面向对象
4、特殊方法 init
- __init__( )
__init__是用于初始化属性,
在对象创建后方法自动执行初始化属性,不需要手动去调用;
示例1:
class A():
def __init__(self,name):
self.name = '张三'
c = A()
print(c.name)
>> 张三
5、 封装
5.1、封装
封装是为了提高程序数据的安全,把数据的属性隐藏,不让外部发现的方法;
封装是面向对象的三大特性之一
5.1.1、封装方法一
较弱的封装方法,把属性名改成一些难以看透的名字
示例1:
class ClassName():
def __init__(self, Humiliator_name):
self.Humiliator_name
5.1.2、封装方法二
在类中定义2个方法,一个方法用来获取属性,一个方法用来修改属性
getter() 和 setter() 方法通过 getter 可以获取属性值
通过 setter 可以修改属性值
示例1:
class 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自动帮属性修改了一个名字
实际上将名字修改为 _类名_属性名
示例1:
class 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
示例1:
class 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
示例1:
class 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)
>> 李四
>> 张三