保护变量、私有变量、私有方法介绍:

    _xxx:  单下划线开头叫保护变量,意思是只有类对象和子类对象自己能访问到这些变量,此变量不能通过from XXX import xxx 导入;
__xxx : 双下划线开头叫私有成员,只允许类本身访问,连子类对象也不能访问到这个数据。
__xxx__ : 前后均有一个“双下划线”,系统定义名字, 代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。 代码示例:
class Pub(object):
#定义类的正常变量、保护变量、私有变量
var1 = 'Hello'
_var2 = 'yes'
__var3 = 'haha' #代表类的构造函数
def __init__(self):
self._a = 123
self.__b = 456
self.c = 789 def show_a_var(self):
return self._a def show_b_var(self):
return self.__b def show_var2(self):
return self._var2 def show_var3(self):
return self.__var3 #定义私有方法
def __privatemethod(self):
print('这是私有方法') class Foo(Pub):
pass # 类的实例化对象
sl = Pub() #第一:访问正常变量
print(sl.c) #
print(sl.var1) #第二:访问保护变量
print(sl._a) #
print(sl._var2) #yes #第三:访问私有变量:实例._类名__变量名
print(sl._Pub__var3) # haha
print(sl._Pub__b) #
# print(sl.__b) #错误的写法 #第四:访问正常类方法
print(sl.show_a_var()) #
print(sl.show_b_var()) #456 间接去访问,得到self.__b
print(sl.show_var2()) #yes
print(sl.show_var3()) #haha 间接去访问,得到self.__var3 #第五:访问私有方法: 实例._类名__方法名()
sl._Pub__privatemethod() #结果:这是私有方法 #子类的实例化对象
s2=Foo()
print(s2.show_a_var()) #
print(s2.show_b_var()) #
print(s2.show_var2()) #ye3
print(s2.show_var3()) #haha

私有变量、私有方法应用:

class people():
__place = "nanjing"
_age1 = 20 def __init__(self, name):
self.name = name def __sayhello(self):
print("%s say hello" % self.name) class teacher(people):
pass t1 = teacher("cmz")
print(t1._people__place) # 访问私有变量
t1._people__sayhello() # 访问私有方法 结果是
nanjing
cmz say hello python私有属性和方法案例
单下划线应用:
class people():
__place = "nanjing"
_age = 20 def __init__(self, name):
self.name = name def _test(self):
print("from people test") def __sayhello(self):
print("%s say hello" % self.name) class teacher(people):
pass print(people.__dict__) #<class '__main__.people'> t1 = teacher("cmz")
print(t1) #<__main__.teacher object at 0x029026F0> #得到年龄2中方式
#方式一
print(t1._age) #
#方式二
# print(people._age) #调用test函数2中方式
#方式一
t1._test()
#方式二
people._test(t1) #调用私有方法
t1._people__sayhello() #cmz say hello '''结果
{'__module__': '__main__', '_people__place': 'nanjing', '_age': 20, '__init__': <function people.__init__ at 0x0081B5D0>, '_test': <function people._test at 0x0081B4F8>, '_people__sayhello': <function people.__sayhello at 0x050674F8>, '__dict__': <attribute '__dict__' of 'people' objects>, '__weakref__': <attribute '__weakref__' of 'people' objects>, '__doc__': None}
<__main__.teacher object at 0x00359390>
20
from people test
from people test
cmz say hello '''
双下划线应用:
class people():
__place = "nanjing"
_age = 20 def __init__(self, name):
self.name = name def __sayhello(self):
print("%s say hello" % self.name) class teacher(people):
pass t1 = teacher("cmz")
print(t1._people__place)
t1._people__sayhello() 结果是
nanjing
cmz say hello

 

Python保护变量、私有变量、私有方法的更多相关文章

  1. python保护变量(_),私有变量(__),私有方法,

    上图为常规代码 私有变量(__),私有方法:只是解释器换名字了,可以通过方法/实例字典发现改后的名字: 保护变量,解释器不做任何处理:只是开发者约定的,尽量不要改动: 此时实例无法修改__age属性值 ...

  2. python 类的私有变量和私有方法

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...

  3. Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  4. Python - 面向对象(三)公共变量,受保护变量,私有变量

    前言 在Python的类里面,所有属性和方法默认都是公共的:但Python也可以设置受保护.私有类型的变量or方法 受保护类型的变量.方法 一般称为:protected变量 #!/usr/bin/en ...

  5. [python] 私有变量和私有方法

    1.在Python中要想定义的方法或者变量只在类内部使用不被外部调用,可以在方法和变量前面加 两个 下划线 #-*- coding:utf-8 -*- class A(object): name = ...

  6. python基础-私有变量和方法

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

  7. python中类的定义、实例化、封装以及私有变量/方法

    1.  定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 ...

  8. python下划线,私有变量

      转自:http://blog.sina.com.cn/s/blog_58649eb30100g4zo.html Python用下划线作为变量前缀和后缀指定特殊变量. "单下划线" ...

  9. Python基础_私有变量访问限制

    Python内置了一些特殊变量,以前后上下划线标注,同时我们自己要想定义一些变量,不想让外部访问,又该怎么做呢?更多内容请参考:Python学习指南 访问限制 在class内部,可以有属性和方法,而外 ...

随机推荐

  1. CSU 1216异或最大值 (0-1 trie树)

    Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数 ...

  2. IO流的应用_Copy文件

    IO流的应用_Copy文件 (1) import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  3. 解决mysql远程连接失败的问题

    问题描述 在我远程连接我的服务器数据库的时候,navicat给我提示了这么一个错误: ERROR : Host 'xxx' is not allowed to connect to thisMySQL ...

  4. 前端之HTML和CSS

    html概述及html文档基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制 ...

  5. Servlet学习笔记06——什么是转发,路径,状态管理?

    1.include指令 (1)作用: 告诉容器,在将jsp转换成Servlet时,将 某个文件的内容插入到该指令所在的位置. (2)语法: <%@ include file="&quo ...

  6. chorme浏览器不支持audio/video中的autoplay属性的解决方法

    在chrome 浏览器中输入:chrome://flags 再搜索audio,找到Autoplay policy 再在右侧的选项中设置为 no user gesture is required 即可

  7. C指针——简单总结

    简介: 指针变量在使用前,必须指向具体的有效的内存单元 指针变量在使用前不但要定义还要初始化 四个方面:指针的类型,指针指向的类型,指针的值或者指针所指向的内存区,指针本身所占的内存区 int *pt ...

  8. 关于学习less后一些感悟

    学习了一天的less发现,自己被自己弄的晕头转向,好在是学明白了! 一.写自己的第一个less css样式编程: 网址:http://www.1024i.com/demo/less/document. ...

  9. MyBatis---缓存策略cache的使用

    一般在查询时使用 使用步骤 1.配置config.xml,开启缓存 <setting name=”cacheEnabled” value=”true” /> 2.在Mapper文件头指定使 ...

  10. JSONP解决跨域完整例子

    1.这个案例是仿照百度搜索,输入关键词,会出现下拉菜单的过程. 效果: 2.具体做法: (1)利用百度的数据库做script标签的src. 复制之后的地址是这样的 https://sp0.baidu. ...