python特性、属性以及私有化
来源:互联网 发布:萧山区网络问政临浦 编辑:程序博客网 时间:2024/06/15 20:39
原文链接:http://www.cnblogs.com/starsea/p/5429222.html
python中特性attribute
特性是对象内部的变量
对象的状态由它的特性来描述,对象的方法可以改变它的特性
可以直接从对象外部访问特性
特性示例:- 12345678910111213141516
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中私有化特性
为了让外部无法访问特性或方法,只要在名字前面加上双下划线即可。
特性私有化示例:
1234567891011121314151617class
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隐藏访问器的方法,让所有特性看起来一样,这种通过访问器定义的特性被称为属性
属性使用示例:
12345678910111213141516171819202122232425262728293031323334# 第一种方法使用属性
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()第一个参数是getter方法,第二个参数是setter方法
property函数可以用0,1,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 类属性 实例属性 特性
- 【终极面试】基础向
- 数组
- leetcode[Integer to Roman]//待整理多种解法
- 【Unity与23种设计模式】适配器模式(Adapter)
- 关于bzoj上搜索水题题的一些推荐
- python特性、属性以及私有化
- 解决修改MySQL的数据库存放路径后不能重启的问题
- Java中Filter、Servlet、Listener的学习
- java读取文件-Java基础
- spring简介
- 最长数字串
- Codevs 1155 金明的预算方案
- 关于慕课网学习的前端基础笔记
- [DFS] NYOJ-1058-部分和问题