前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小朋友学Python(23):类的属性与方法

小朋友学Python(23):类的属性与方法

作者头像
海天一树
发布2018-04-17 11:55:47
5690
发布2018-04-17 11:55:47
举报
文章被收录于专栏:海天一树海天一树

(一)类的私有属性

__private_attr:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。 比如:self.__wife

(二)类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。 在类的内部调用方式为self.__private_methods

例1

代码语言:javascript
复制
class MyCounter:
    __privateCount = 0  
    publicCount = 0    
    def count(self):
        self.__privateCount += 1
        self.publicCount += 1
        print self.__privateCount
c = MyCounter()
c.count()
c.count()
print c.publicCount
print c.__privateCount

运行结果:

代码语言:javascript
复制
1
2
2
Traceback (most recent call last):
  File "Count.py", line 17, in <module>
    print counter.__privateCount  
AttributeError: MyCounter instance has no attribute '__privateCount'

Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName 访问属性,将如下代码替换以上代码的最后一行代码:

代码语言:javascript
复制
print counter._MyCounter__privateCount

例2

代码语言:javascript
复制
class MyCounter:
    __privateCount = 0  
    publicCount = 0    
    def count(self):
        self.__privateCount += 1
        self.publicCount += 1
        print self.__privateCount
c = MyCounter()
c.count()
c.count()
print c.publicCount
print c._MyCounter__privateCount

运行结果:

代码语言:javascript
复制
1
2
2
2

(三)下划线说明

__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似__init__()之类的。

_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天一树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)类的私有属性
  • (二)类的私有方法
    • 例1
      • 例2
      • (三)下划线说明
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档