python特性、属性以及私有化
来源:互联网 发布:预测股票走势的软件 编辑:程序博客网 时间:2024/06/03 23:41
python特性、属性以及私有化
python中特性attribute
特性是对象内部的变量
对象的状态由它的特性来描述,对象的方法可以改变它的特性
可以直接从对象外部访问特性
特性示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class
Person:
name
=
'yoda'
# 类中特性
def
get_name(
self
):
# 通过访问器方法访问特性
return
self
.name
def
set_name(
self
, value):
# 通过访问器方法改变特性
self
.name
=
value
运行:
A1
=
Person()
A1.name
# 直接从外部访问特性
yoda
A1.name
=
'master'
# 直接从外部改变特性
默认情况下,python支持从外部对特性进行操作,但它破坏了类的封装原则,要从外部对象无法访问,应该使用私有特性。
python中私有化特性
为了让外部无法访问特性或方法,只要在名字前面加上双下划线即可。
特性私有化示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class
Secret:
__name
=
'yoda'
# 加上双下划线私有化特性
def
get_name(
self
):
return
self
.__name
def
__secret(
self
):
# 私有化方法
print
"can't find"
def
access(
self
):
return
self
.__secret()
# 访问器访问私有方法
A2
=
Secret()
A2.__name
# 访问不到特性!
A2._Secret__name
# 还是可以从外部访问特性
yoda
-
python本质上并不完全支持私有化,只不过是将名字进行改变了
python中使用属性(property)对特性进行访问和设置
有一些面向对象语言支持私有特性,这些特性无法从外部直接访问,需要编写getter和setter方法对这些特性进行操作
python不需要getter和seter方法,因为python中所有特性都是公开的,如果不放心使用直接访问对象的特性,可以为对象编写setter和getter方法,但是更好的解决办法是使用属性(property)
- python隐藏访问器的方法,让所有特性看起来一样,这种通过访问器定义的特性被称为属性
属性使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 第一种方法使用属性
class
foo:
def
__init__(
self
):
self
.name
=
'yoda'
self
.work
=
'master'
def
get_person(
self
):
return
self
.name,
self
.work
def
set_person(
self
,value):
self
.name,
self
.work
=
value
person
=
property
(get_person,set_person)
运行如下:
A3
=
foo()
A3.person
(
'yoda'
,
'master'
)
A3.person
=
'skylaer'
,
'programer'
A3.person
(
'skylaer'
,
'programer'
)
# 第二种方法使用属性
class
foo:
def
__init__(
self
):
self
.name
=
'yoda'
self
.work
=
'master'
@property
def
person(
self
):
return
self
.name,
self
.work
@person
.setter
# 如果不指定stter属性,那么无法从类的外部对它的值进行设置,这对于只读特性非常有用
def
person(
self
,value):
self
.name,
self
.work
=
value
<code
class
=
"nohighlight hljs"
> <
/
code>
property()第一个参数是getter方法,第二个参数是setter方法
property函数可以用0,1,2,3或者4个参数来调用,如果没有参数,产生的属性既不可读,也不可写,这四个参数分别叫做fget,fset,fel,fdoc,如果想要一个属性是只写的,并且有一个文档字符串,能使用他们作为关键字参数
阅读全文
0 0
- python特性、属性以及私有化
- python特性、属性以及私有化
- Python特性、属性以及私有化
- python __getattr__ 和 __setattr__方法、属性私有化
- Python--私有化
- Python基础:15私有化
- python的私有化
- Python的私有化
- Python中的下划线/私有化
- python中的私有化
- Python语法中容易混淆的地方-类属性/实例属性/公有变量/私有化变量
- 属性以及它的特性
- c#属性,以及特性类
- oc中属性以及属性的特性
- Python高级教程之私有化
- Python高级特性:类属性
- Python高级特性:私有属性
- python 类属性 实例属性 特性
- PG的两种集群技术:Pgpool-II与Postgres-XL
- 2017.09.22 从hdfs 目录递归读取文件
- java中string与json互相转化
- ztree实现下拉功能 input
- 如何成为架构师系列:以协议为核心的框架(二)
- python特性、属性以及私有化
- 按照起始时间查询(oralce和mysql写法不同)在.xml里面配置
- MFC 消息机制 AfxWndProc->AfxCallWndProc->WindowProc->OnWndMsg
- linux下的文件和目录权限!
- 阿里巴巴Java开发手册学习笔记(二)
- MFC六大核心机制之五、六:消息映射和命令传递
- 创建一个D3D11应用程序流程
- iPhone 8快速充电技术简介,苹果再也不能被安卓嘲笑充电慢
- 一直用PDO,PHP中操作MYSQL数据库常用函数还记得不