Python 私有字段的只读特性和可写特性

@property 在类中一般和私有字段一起使用。

类中如果有私有字段在外部是无法直接访问的,通过@property使其可读或可写。

经典类

经典类中的私有字段是可读可写的。(没有只读功能)

class Person:
    def __init__(self):
        self.__name = 'sate'

    @property
    def Name(self):
        return self.__name

p1 = Person()
print p1.Name           #通过@property 可读。
p1.Name = 'zheng'       #可写
print p1.Name

新式类

新式类中的私有字段是只读,不可写,如果要可写,需要再创建一个被@xxx.setter修饰的特性。

如果想设置为外部只读或者外部可写特性,可使用如下方法:

# coding=utf-8

class Class_1(object):
    def __init__(self, name, age):
        self.name = name
        # 定义一个私有字段age,外部无法直接访问
        self.__age = age

    def read_name(self):
        print 'my name is %s ' % self.name

# 外部无法访问,但是可以通过内部访问到。
    def read_age(self):
        print 'my age is %s' % self.__age

# 使用属性方法将age()方法变为一个类的静态属性。使之变为可读属性。
    @property
    def age(self):
        return self.__age

# 使__age私有字段变成可写,只需调用age属性并直接赋值即可(装饰器格式为‘@函数名.setter’)
# 如果私有变量要设置为只读不可写,则直接去除本段即可。
    @age.setter
    def age(self, value):
        self.__age = value

cla = Class_1('sate', 12)

# 读取正常字段
cla.read_name()

# 调用方法读取__age私有字段
cla.read_age()

# 使用属性方法读取__age私有字段
print cla.age

# 更改类中的__私有字段
cla.age = 18
print cla.age

# 结果==>
my name is sate 
my age is 12
12
18
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 10,474评论 0 13
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,165评论 0 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,387评论 30 472
  • 烹制菜肴时,掌握好油温的火候十分重要。该用旺火的不能用文火,该用文火的也不要用急火。油的温度过高、过低对炒出来的菜...
    懒食记阅读 29,757评论 0 2
  • PHP日期和时间之取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间...
    深沉的简单阅读 1,547评论 0 1