首页 / PYTHON / 【python学习笔记】封装
【python学习笔记】封装
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【python学习笔记】封装,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4220字,纯文字阅读大概需要7分钟。
内容图文
![【python学习笔记】封装](/upload/InfoBanner/zyjiaocheng/600/63b26852259d4815b5aa61c69035a3d1.jpg)
封装是面向对象的三大特性之一
封装指隐藏对象中一些不希望被外部所访问的属性或方法
如何隐藏对象中的属性?
- 讲对象的属性名,改为一个外部不知道名字
如何获取(修改)对象的属性名
- 需要提供一个getter和setter方法使外部可以访问到属性
- getter 获取对象中的指定属性(get_属性名)
- setter 用来设置对象的指定属性(set_属性名)
使用封装,确实增加了类的定义的复杂程度,但是它也确保了数据的安全性
1.隐藏了属性名,使调用者无法随意的修改对象中的属性
2.增加了getter和setter方法,很好的控制的属性是否是只读的
- 如果希望属性是只读的,则可以直接去掉setter方法
- 如果希望属性不能被外部访问,则可以直接去掉getter方法
3.使用setter方法设置属性,可以增加数据的验证,确保数据的值是正确的
4.使用getter方法获取属性,使用setter方法设置属性
- 可以在读取属性和修改属性的同时做一些其他的处理
5.使用getter方法可以表示一些计算的属性
class person:
def __init__(self, name):
self.hidden_name = name # 改属性名
def hello (self):
print('大家好,我是 %s' %self.hidden_name)
def get_name(self):
'''
get_name()用来获取对象的name属性
'''
# print('用户读取了属性')
return self.hidden_name
def set_name(self , name):
# print('用户修改了属性')
self.hidden_name = name
def get_age(self):
return self.hidden_age
def set_age(self , age):
if age > 0 :
self.hidden_age = age
p = person('xiaoming', 8)
# 调用setter 修改 name 属性
p.set_name('小黑')
p.set_age(-11)
print(p.get_name())
print(p.get_age())
___________________________________________________________________________________
class Rectangle:
'''
表示矩形的类
'''
def __init__(self,width,height):
self.hidden_width = width
self.hidden_height = height
def get_width(self):
return self.hidden_width
def get_height(self):
return self.hidden_height
def set_width(self , width):
self.hidden_width = width
def set_height(self , height):
self.hidden_height = height
def get_area(self):
return self.hidden_width * self.hidden_height
r = Rectangle(5,2)
r.set_width(10)
r.set_height(20)
print(r.get_area())
-------------------------------------------------------------------------------------------------------------------------------------------------
可以为对象的属性使用双下划线开头,__xxx
双下划线开头的属性,是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过对象访问
其实隐藏属性只不过是Python自动为属性改了一个名字
实际上是将名字修改为了,_类名__属性名 比如 __name -> _Person__name
class Person:
def __init__(self,name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self , name):
self.__name = name
p = Person(‘小米’)
p.__Person__name='小溪'
print(p.get_name())
使用__开头的属性,实际上依然可以在外部访问,所以这种方式我们一般不用
一般我们会将一些私有属性(不希望被外部访问的属性)以_开头
一般情况下,使用_开头的属性都是私有属性,没有特殊需要不要修改私有属性
class Person:
def __init__(self,name):
self._name = name
def get_name(self):
return self._name
def set_name(self , name):
self._name = name
p = Person('孙悟空')
print(p._name)
--------------------------------------------------------------------------------------------------------------------------------------------------
property装饰器
class Person:
def __init__(self,name,age):
self._name = name
self._age = age
# property装饰器,用来将一个get方法,转换为对象的属性
# 添加为property装饰器以后,我们就可以像调用属性一样使用get方法
# 使用property装饰的方法,必须和属性名是一样的
@property
def name(self):
print('get方法执行了~~~')
return self._name
# setter方法的装饰器:@属性名.setter
@name.setter
def name(self , name):
print('setter方法调用了')
self._name = name
@property
def age(self):
return self._age
@age.setter
def age(self , age):
self._age = age
p = Person('小米',18)
p.name = '小溪'
p.age = 28
print(p.name,p.age)
内容总结
以上是互联网集市为您收集整理的【python学习笔记】封装全部内容,希望文章能够帮你解决【python学习笔记】封装所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。