-
2020-11-21 02:13:55
学过编程语言的人员,都知道私有变量在编程中必不可少,与Java和C语言用private关键字定义私有变量不同,Python是在变量前面加上双横杠(例如:__test)来标识,
Python私有变量只能在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下划线,即“_ClassName__变量名”形式。
Python私有变量或方法在自身类中不能直接调用,需通过在类中定义接口,实现私有变量的引用、读取和修改。
除了Python私有变量是使用“_”定义之外,还有两种特殊变量,分别是:
1. _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入 。
2. __xx__定义的是特列方法。用户控制的命名空间内的变量或是属性,如init , __import__或是file 。只有当文档有说明时使用,不要自己定义这类变量。
其实,Python并没有真正的私有化支持,用下划线得到的也是伪私有,因此,在Python编程中应尽量避免使用定义以下划线开头的变量!
更多相关内容 -
Python私有变量与私有方法
2022-06-24 15:22:17Python私有变量与私有方法python的私有化是为了规划私有属性,避免非相关的访问【假如!我有老婆,你不能直接知道我老婆是谁,你只有问我才会知道,即我的私有属性只有我知道】
在python中定义私有变量和私有方法只需要在变量名或函数名前加上 "__"两个下划线
在类内部的方法中使用时 self.__变量名或函数名。
实际上,如果真要访问私有变量和私有方法,也是可以访问的,因为实际上私有化的操作只是将变量或函数名更改了而已:- 下例中由
private_value
变为了_A__private_value
【即_类名__
属性名】,但为了保持私有性,不建议直接使用这种方法访问
''' 学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' class A: _private=6 __private_value=5 def __private_func(self): print("hello") def get_private_value(self): return self.__private_value a=A() # print(a.__private_value)###报错,找不到该属性 print(a.get_private_value()) print(a._A__private_value)
私有化变量和方法的继承:【子类不会继承基类私有属性,但仍然通过基类的函数来获取或可以强行访问】
class A: _private=6 __private_value=5 def __private_func(self): print("hello") def get_private_value(self): return self.__private_value class B(A): pass b=B() # print(b.__private_value)#报错 print(b.get_private_value())#可以使用父类的方法来获取私有属性 print(b._A__private_value)#强制访问还是可以的
- 下例中由
-
Python私有变量
2018-02-27 18:36:00私有变量表示方法在变量前加上两个下划线的是私有变量。class Teacher(): def __init__(self,name,level): self.__name=name self.__level=level #获取老师的等级 def get_level(self): return self.__level #...私有变量表示方法
在变量前加上两个下划线的是私有变量。
class Teacher(): def __init__(self,name,level): self.__name=name self.__level=level #获取老师的等级 def get_level(self): return self.__level #获取名字 def get_in_name(self): return self.__name
动态方法无法读取私有变量
即使是动态方法也无法读取私有变量,强行读取会报错。
#定义动态方法 def get_name(self): return self.__name #动态方法赋值 Teacher.get_name=get_name t=Teacher("GG",5) print("level is: ",t.get_level()) #可行 print("name is",t.get_name()) #报错,显示没有该属性
动态方法无法修改私有变量
动态方法也无法修改私有变量,强行修改不会报错,但是没有效果。
t.set_name("NN") #实际没有效果但是不报错 print(t.get_in_name()) #类内部获取名字,输出GG
强行读取和修改私有变量
那么强行要读取和改变私有变量怎么办呢?
有一个不推荐但是可行的办法:
私有属性在对象内部被名字是”类名_属性名”。
在这个例子里,是这样的:print("name is",t._Teacher__name) #输出GG t._Teacher__name="AA" #被改变了 print("name is",t._Teacher__name) #输出AA
-
python私有变量和@property属性
2022-01-10 15:01:06私有变量 私有成员:命名使用双下划线开头。 ·作用:无需向类外提供的成员,可以通过私有化进行屏蔽。·做法:命名使用双下划线开头。 ·本质:障眼法,实际也可以访问。 私有成员的名称被修改为:_类名_成员名,可以...私有变量
- 私有成员:命名使用双下划线开头。
- ·作用:无需向类外提供的成员,可以通过私有化进行屏蔽。·做法:命名使用双下划线开头。
·本质:障眼法,实际也可以访问。
私有成员的名称被修改为:_类名_成员名,可以通过_dict_属
性或dir函数查看。
""" 封装 -- 私有成员 障眼法:修改了私有变量名称 本质: __变量名 --> _类名__变量名 """ # 1. 私有化实例变量 # 2. 提供两个公开的读写方法 class Wife: def __init__(self, name="", age=0): self.name = name # self.__age = age self.set_age(age) def get_age(self): return self.__age def set_age(self, value): if 20 <= value <= 50: self.__age = value else: raise Exception("我不要") w01 = Wife("宁宁", 25) w02 = Wife("铁锤", 26) w01.set_age(27) print(w01.get_age()) w01.__age = 100 # print(w01.__age)# 私有化 print(w01.__dict__)#查看当前有的实例变量 print(w01._Wife__age)# ????
""" 封装 -- 标准属性 作用:保护实例变量 """ # 1. 创建实例变量 # 2. 提供两个公开的读写方法(对self.age) # 3. 使用@property修饰读取方法 # 使用@属性名.setter修改写入方法 class Wife: def __init__(self, name="", age=0): self.name = name self.age = age @property# 创建property对象,自动绑定下面方法(读取) def age(self): return self.__age @age.setter# 自动绑定下面方法(写入) def age(self, value): if 20 <= value <= 50: self.__age = value else: raise Exception("我不要") w01 = Wife("宁宁", 25) w01.age = 27 print(w01.age) print(w01.__dict__)
""" 封装 -- 属性 """ # 1. 创建实例变量 # 2. 提供两个公开的读写方法 # 3. 创建类变量存储property对象 class Wife: def __init__(self, name="", age=0): self.name = name # self.set_age(age) self.age = age def get_age(self): return self.__age def set_age(self, value): if 20 <= value <= 50: self.__age = value else: raise Exception("我不要") # @property # def get_age(self): # return self.__age # @get_age.setter # def age(self, value): # if 20 <= value <= 50: # self.__age = value # else: # raise Exception("我不要") # 类变量 # property 作用:拦截 age = property(get_age, set_age) w01 = Wife("宁宁", 25) w02 = Wife("铁锤", 26) # w01.set_age(27) w01.age = 27 print(w01.age) print(w01.__dict__)
@property
- 公开的实例变量,缺少逻辑验证。私有的实例变量与两个公开的方法相结合,又使调用者的操作略显复杂。而属性可以将两个方法的使用方式像操作变量一样方便。
- 通常两个公开的属性(读、写),保护一个私有的变量。@property负责读取,@属性名. setter负责写入只写:属性名= property(None,写入方法名)
可以运行运行上面的代码体会一下 -
python私有变量
2019-05-02 12:06:18在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个下划线,那么这个函数或变量就是私有的了。 在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__membername,也就是说... -
浅谈Python中的私有变量
2020-12-23 15:59:54私有变量表示方法 在变量前加上两个下划线的是私有变量。 class Teacher(): def __init__(self,name,level): self.__name=name self.__level=level #获取老师的等级 def get_level(self): return self.__... -
Python 私有变量的访问和赋值
2020-12-09 14:12:16Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),不是private变量,所以,不能用__name__、__sex__这样的变量名定义私有... -
python私有变量子类如何继承-女性时尚流行美容健康娱乐mv-ida网
2020-12-21 04:31:09女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 >高级搜索 浅谈 python 中的 私有 变量 私有 ... -
python私有变量_python中的私有变量
2020-11-30 13:25:12python中的私有变量 -
Python类中的 私有变量和私有方法
2020-11-21 02:14:06在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个下划线,那么这个函数或变量就是私有的了。在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__mem... -
python基础学习-公有变量与私有变量
2021-10-11 09:22:49在Python中定义私有变量只需要在变量名或函数名前加上两个下划线"_",那么这个函数或变量就会为私有的了。 无法直接访问私有变量 # 私有变量,通过添加两个下划线定义 class Person: __name = '人名' p = Per -
python类的私有变量
2020-12-15 11:52:271.类的私有变量和私有方法1)_xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如:当使用“from Mimport”时,不会将以一个下划线开头的对象引入。2)__... -
Python 私有变量
2018-03-22 12:22:26私有变量表示方法 在变量前加上两个下划线的是私有变量。 class Teacher(): def __init__(self,name,level): self.__name=name self.__level=level #获取老师的等级 def get_level(self): return self._... -
python中私有变量的继承
2021-03-06 19:31:58在python中继承时,私有变量出现以下错误:AttributeError: 'dog' object has no attribute '_dog__name'我找了很多东西,但不知道我的问题在哪里class animal(object):__name = ""__height = ""__weight = ""__... -
【Python面向对象编程】第08篇 私有变量
2022-03-11 15:11:28本篇我们介绍封装(encapsulation)的概念,以及如何在 Python 中利用私有属性实现封装。封装是将数据和方法打包成一个类,从而隐藏信息和限制外部访问。按照惯例,单下划线前缀的属性被视为私有属性。Python 会对双... -
python私有变量 保护变量
2019-07-30 12:00:44原作者:https://www.cnblogs.com/ldw3432/p/8336571.html -
Python私有变量解析
2020-12-22 17:43:55这篇文章主要为大家详细介绍了Python私有变量解析,具有一定的参考价值,可以用来参考一下。对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!私有变量表示方法在变量前加上两个... -
Python类中的私有变量和公有变量
2020-07-30 14:20:25我们这里就直奔主题,不做基础铺垫,默认你有一些Python类的基础,大家在看这篇博客的... __c = 300 #私有变量 __d__ = 400 #公有变量 a = A() #实例化一个对象a print(a.a,a._b,a.__c,a.__d__) #打印四个变量的值 运 -
python的私有变量
2019-06-13 18:00:15在看python代码的时候,有时候会发现有的变量或者函数前面会加入“_”(一个杠)或者“__”(两个杠)来表示变量的私有,出于好奇,在网上找了很多说法并结合自己实际操作,简单记录一下这方面的内容。 1. 与类无关... -
[Python]Python中的私有变量
2020-11-30 13:25:12[Python]Python中的私有变量 -
Python基础教程:私有变量的访问和赋值教程
2021-09-09 14:43:26首先我们这里先描述下: Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),...我们看个例子:访问python的私有变量: class -
Python的私有变量和私有方法
2020-11-21 02:14:06在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个下划线,那么这个函数或变量就是私有的了。在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__mem... -
Python 中私有变量的定义和用法
2019-10-12 16:01:19为什么设计私有变量 大多数 Python 代码都遵循这样一个约定:带有一个下划线的名称 (例如: _spam) 应该被当作是 API 的非公有部分 (无论它是函数、方法或是数据成员)。 为了保证对于类私有成员的有效使用(例如...