1. 非私有变量,可以随意调用和修改

在class内部,有属性和方法,如下面的class Student 有name和score

class Student(object):

    def __init__(self, name, score):
self.name = name
self.score = score 这两个属性是直接可以通过实例来获取和修改的
bart = Student('Bart Simpson', 50)
print(bart.name)
print(bart.score) 输出:

Bart Simpson
50

2. 私有变量,不可以直接调用,如果要让内部属性不让外部访问,可以在属性的前面加上__,变成一个私有变量(private),如__name。

class Student(object):

    def __init__(self, name, score):
self.__name = name
self.__score = score 修改之后,已经无法从外部访问实例变量.__name, 实例变量.__score
bart = Student('Bart Simpson', 50)
print(bart.__name)
print(bart.__score) 输出:

Traceback (most recent call last):
File "...test1.py", line 49, in <module>
print(bart.__name)
AttributeError: 'Student' object has no attribute '__name'

不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量,但是建议不要这么做,不同版本的Python解释器会把_name改成不同的变量名。

bart = Student('Bart Simpson', 50)
print(bart._Student__name)
print(bart._Student__score)

3. 特殊变量 __xxx__,特殊变量是可以直接访问的,不是private变量,所以不能用__name__, __score_这样的变量名

4. 特殊变量_xxx,就是只有一个下划线开头的变量,这样的实例变量外部是可以访问的,但是约定俗成的规定,这样的变量不要直接访问,把它当成私有变量。



python 属性的访问权限,_,__,__XXX__的更多相关文章

  1. Python下划线的使用 _ __ __obj__

    Python 用下划线作为变量前缀和后缀指定特殊变量.   _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名   核心风格:避 ...

  2. python 面向对象三 访问权限 下划线 双下划线

    一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...

  3. ASP.NET Core中使用自定义验证属性控制访问权限

    在应用中,有时我们需要对访问的客户端进行有效性验证,只有提供有效凭证(AccessToken)的终端应用能访问我们的受控站点(如WebAPI站点),此时我们可以通过验证属性的方法来解决. 一.publ ...

  4. javascript中类的属性访问权限研究(1)

    本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...

  5. ethereum(以太坊)(二)--合约中属性和行为的访问权限

    pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...

  6. python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名

    python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...

  7. python类内init外声明的属性与init内声明的对象属性的访问和操作区别

    python类内init外声明的属性与init内声明的对象属性的访问和操作区别(面试题) 1.在ipython中输入以下代码,其输出会是什么? In [1]: class ClassOut: ...: ...

  8. python 访问权限

    访问权限 权限: 公有的:类中的普通属性和方法,默认都是公有的,可以在类的内部.外部.子类中使用 私有的:定义是在前面加两个'_',只能在本类的内部使用,不能再外部及子类中使用 示例: class P ...

  9. python中单下划线(_)和双下划线(__)的特殊用法

    单下划线开头(_) 在模块中使用单下划线开头 模块中使用单下划线(_)开头定义函数.全局变量和类不能被模块外部以: from module import *形式导入. 但可以用:from module ...

随机推荐

  1. 利用SMB jcifs实现对windows中的共享文件夹的操作

    需求是在本地上传文件到服务器上,服务器是windows的,使用共享文件夹提供权限给你的. 利用第三方: CIFS (Common Internet File System) SMB(Server Me ...

  2. SharePoint online Multilingual support - Development(1)

    博客地址:http://blog.csdn.net/FoxDave 上一节讲了SharePoint Online网站多语言的实现原理机制,本节主要从编程的角度来谈一下如何进行相关的设置. 下面列出 ...

  3. 如何正确认识Docker Kubernetes 和 Apache Mesos

    参考链接: http://geek.csdn.net/news/detail/229382

  4. 运行时常量池中的符号引用/String.intern() /ldc指令

    运行时常量池,之前放在方法区(永久代)中,1.8之后被转移到元空间,放到了native memory中. 具体的数据结构是:(看对象的内存布局,句柄访问还是对象头中保存指向类的元数据的指针,这里以对象 ...

  5. 框架:初识Spring

    Spring篇 第一章.Spring简介 一.Spring的体系结构 1.介绍 Spring有20多个的模块,这些模块分布与核心容器(Core Container).数据访问/集成(Data Acce ...

  6. C#清理所有正在使用的资源

    namespace QQFrm{    partial class Form1    {        /// <summary>        /// 必需的设计器变量.        ...

  7. Windows10下pip的配置文件设置

    pip.ini的内容: [global] index-url = http://mirrors.aliyun.com/pypi/simple trusted-host = mirrors.aliyun ...

  8. 5个适用于初学者的有用数据分析表达式(DAX)函数

    数据分析表达式(DAX)入门可能令人生畏,但是,当你了解一些基本功能后,你就可以帮助你解答许多有关数据的新见解.虽然在Power BI或Pivot Charts中创建视觉效果很容易,但我们经常希望查看 ...

  9. 有两艘船需要装运的n箱货物,第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱i的重量,且w1+w2+……+wn<=c1+c2

    (1) 问题描述:        有两艘船和需要装运的n个货箱,第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱的质量,且w1+w2+...+wn <= c1+c2. 希望确定是否有一 ...

  10. Stiring公式证明