私有属性

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改。

这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮

那如果想让外部代码获取私有属性该怎么办?

修改内部代码:可以给类增加访问方法(return self.__name)和修改方法(self.__score=score)

>>>class Student(object):
  def get_name(self):
    return self.__name 
>>>class Student(object):
  def set_score(self, score):
    self.__score = score

从外部直接调用:不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,其实仍然可以通过bart.__Student__name来访问私有属性(不推荐使用)

实例属性

方法一:通过实例变量绑定(只对绑定的实例起作用)

>>>class Student():
  pass
>>>bart = Student()

可以自由地给一个实例变量绑定属性,比如,给实例bart绑定一个name属性:

>>>bart.name = 'Bart Simpson'
>>>bart.name
'Bart Simpson'

方法二:通过self变量绑定(所有实例都起作用)

由于类可以起到模板的作用,因此可以在创建类的时候,通过定义一个特殊的__init__方法,把一些我们认为必须绑定的属性强制填写进去

>>>class Student(object):
  def __init__(self, name, score):
    self.name = name
    self.score = score

注意:__init__方法的第一个参数永远是self,表示创建的实例本身;因此在__init__方法内部,就可以把各种属性绑定到self,也就是绑定到实例,因为self就指向创建的实例本身。

有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数

给实例限定属性

定义一个特殊的__slots__变量,来限制该class实例能添加的属性

>>>class Student(object):
  __slots__ = ('name', 'age')
>>>s = Student()
>>>s.score = 99 #报错

注意:__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的,除非在子类中也定义一个__slots__

类属性

给类绑定属性:直接在class中定义即可

>>>class Student():
  name = 'demi'

定义好的name即为类属性,这个属性虽然归类所有,但类的所有实例都可以访问

>>>s = Student()
>>>print(s.name)
demi

或者

>>>Student.name
demi

注意:

实例属性属于各个实例所有,互不干扰

类属性属于类所有,所有实例都可共用

不要对实例属性和类属性使用相同的名字,否则实例属性将屏蔽掉类属性

不要对属性和方法使用相同的名字,否则属性会覆盖方法

>>>class C:
  def x(self):
    print('Xman')
>>>c = C()
>>>c.x()
Xman
>>>c.x = 1
>>>c.x() #报错,属性与方法重名了

Python笔记(十八)_私有属性、实例属性、类属性的更多相关文章

  1. Python爬虫(十八)_多线程糗事百科案例

    多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...

  2. Python笔记(十五)_异常处理

    try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...

  3. Python笔记(十四)_永久存储pickle

    pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...

  4. [b0033] python 归纳 (十八)_队列Queue在多线程中使用(二)

    # -*- coding: UTF-8 -*- """ 多线程同时读队列 使用 join(), task_done() 逻辑: 3个子线程并发 从有6个数据的队列中取数据 ...

  5. Python笔记(十九)_继承

    继承 继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写 多重继承 通过多重继承,一个子类就可以同时获得多个父类的所有功能 > ...

  6. Python笔记(十二)_文件

    文件的打开模式 'r':以只读的方式打开文件(默认) 'w':以写入的方式打开文件,会覆盖已存在的文件 'x':用写入的方式打开文件,如果文件已存在,会抛出异常 'a':用写入的方式打开文件,如果文件 ...

  7. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  8. Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性

    类属性.实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外 ...

  9. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

随机推荐

  1. csrf原理及flask的处理方法

    csrf原理及flask的处理方法 为什么需要CSRF? Flask-WTF 表单保护你免受 CSRF 威胁,你不需要有任何担心.尽管如此,如果你有不包含表单的视图,那么它们仍需要保护. 例如,由 A ...

  2. Vert.x学习第一天

    昨天看了下异步,然后就开始了Vert.x相关知识的学习. Vert.x是当下非常流行的一套全异步框架,其优势在于轻量级.高效.非常适合作为移动端后台或是企业应用. 当然对于第一天接触这个框架的人(没错 ...

  3. github(1):

    1.目的:借助github托管项目带按摩 2.仓库:创建一个Repository 3.收藏(Start):仓库主页start按钮,意思是收藏项目的人数,在github上如果有一个项目获得100个sta ...

  4. V8引擎回收机制、 内存泄露

     一.垃圾回收:将内存不在使用的数据进行清理,释放内存空间   v8将内存分为新生代空间和老生代的空间   新生代空间:用于存活较短的对象   :又分为二个空间:from空间和to空间   :Scav ...

  5. referenceQueue用法

    何为referenceQueue 在java的引用体系中,存在着强引用,软引用,虚引用,幽灵引用,这4种引用类型.在正常的使用过程中,我们定义的类型都是强引用的,这种引用类型在回收中,只有当其它对象没 ...

  6. python的type和object

    在python中一切皆对象,这是个用python的人都知道的概念,以int举例,比如a=2,type下: 发现他的type是int,在python中type就是类,所以a是类int的一个对象,实例是类 ...

  7. JFreeChart使用

    最近项目需要做图形分析,就想到了使用JFreeChart,之前也没有使用过,就现学先用吧.本文主要记录一些主要的代码及学习使用过程. 使用JFreeChart步骤: 一.下载JFreeChart.ja ...

  8. Ubuntu apt-get install E: 无法定位软件包Ubuntu apt-get install E: 无法定位软件包

    sudo cp /etc/apt/sources.list /etc/apt/sources.list-bak #先将之前的source-list备份 sudo vi /etc/apt/sources ...

  9. 前端每日实战:21# 视频演示如何用纯 CSS 创作文本滑动特效的 UI 界面

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QrxxaW 可交互视频教程 此视频 ...

  10. css 响应式(媒介查询)

    1.CSS 来实现响应式 CSS实现响应式网站的布局要用到的就是CSS中的媒体查询接下来来简单介绍一下: @media 类型 and (条件1) and (条件二){css样式} <link r ...