Python 类属性与方法

标签(空格分隔): Python


Python的访问限制

Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外部访问。

class Person:
def __init__(self, name, age, sex):
self.name = name
self._age = age
self.__sex = sex def out_name(self):
print self.name def _out_age(self):
print self._age def __out_sex(self):
print self.__sex xiaohong = Person('xiaohong', 20, 1)
print 'name'
xiaohong.out_name()
print xiaohong.name
print 'age'
xiaohong._out_age()
print xiaohong._age
print 'sex'
# 以下两句报错
xiaohong.__out_sex() # AttributeError: Person instance has no attribute '__outSex'
xiaohong.__sex # AttributeError: Person instance has no attribute '__sex'

可以看到,以双下划线开头的变量无法在类外被访问。

当然以单下划线开头的变量能够被外界访问,然而在一般规范中,将正常变量作为类变量,将单下划线开头的变量作为实例变量。

类变量与实例变量

类变量就是在类的实例之间能够共享变量值的变量,实例变量就是该实例具有的变量。也就说,实例变量每个实例各自拥有,互相独立,而类变量有且只有一份。

具体可以参见:

# coding=utf-8
class aa:
# w就是一个类变量,为该类的实例对象所共有,需要在定义时就进行赋值
w = 10
def __init__(self):
self._x = 11
self._y = 12
def add(self):
return self._x + self._y a = aa()
print a.add()
# 改变类变量的值
aa.w = 20
# 设置实例中实例变量的值,将覆盖类变量的值
a.w = 13
print aa.w, a.w # 输出20 13
del a.w
print a.w # 输出20 # 设置实例变量
a._t = 14
a._q = 15
print a._t, a._q # 输出14 15 # 设置类变量,该类的所有实例对象共有
aa.m = 30
aa.n = 40
print aa.m, aa.n # 输出30 40 b = aa()
print b._x,b._y
# print b._t,b._q # 该句报错,因为b对象没有属性t,q
print b.m,b.n # 25.26行设置了类变量m,n,输出30 40
print b.w # 在14行已经改变了w的值,输出20

实例方法与类方法

和属性变量一样,方法也分为实例方法与类方法。

class内部定义的全部是实例方法,实例方法的第一个参数是self代表的是实例本身。

要在class中定义类方法,需要使用@classmethod修饰说明,参数也不在是self,而是cls.

class Person:

    __count = 0

    def __init__(self, name):
self._name = name
Person.__count += 1 @classmethod
def how_many(cls):
return cls.__count print Person.how_many() # 输出 0 p1 = Person('Bob') print Person.how_many() # 输出1

最新文章

  1. [转载]Difference between <context:annotation-config> vs <context:component-scan>
  2. javascript 中正则表达式应用
  3. ELK IIS 日志-->logstash-->ElasticSearch
  4. 嵌入式Linux内核制作【转】
  5. 事件函数SetEvent、PulseEvent与WaitForSingleObject详解
  6. AutoCAD 2013官方简体中文破解版(32 / 64位),带激活码和注册机
  7. discuz!代码内置颜色大全(收藏)
  8. 【源代码】TreeMap源代码剖析
  9. Java中显示图片的方法
  10. AsyncTask用法解析-下载文件动态更新进度条
  11. iOS学习之Map,定位,标记位置的使用
  12. Python内置函数(60)——staticmethod
  13. 从零开始单排学设计模式「策略模式」黑铁 II
  14. Xamarin.Android 上中下布局
  15. CAD版本 注册表信息
  16. request.getParameter(“xxx”)的参数的取值
  17. SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
  18. OpenStack 图形化服务 Horizon使用(十三)
  19. eclipse的块选择模式
  20. CubieTruck入手第一天

热门文章

  1. Linux安装JDK1.7
  2. php实现设计模式之 职责链模式
  3. 数据结构与算法 Big O 备忘录与现实
  4. 第三十章 elk(1) - 第一种架构(最简架构)
  5. hibernate(1) —— 入门
  6. O365(世纪互联)SharePoint 之文档库使用小记
  7. iOS 10 :用 UIViewPropertyAnimator 编写动画
  8. 【Swift】 应用内显示 AppStore 某个应用的详情
  9. 【Swift】TTTAttributedLabel使用小记
  10. java对象与json串互转