Python 类中的变量作用域
- 2024-12-23 08:43:00
- admin 原创
- 82
问题描述:
在类中(函数外部)声明一个变量:所有类函数都可以访问它(基本上是一个公共变量)
在类内的函数内声明一个变量:只有该函数可以访问它(它在该函数的范围内)
在类内部的函数内声明一个变量self.(variable name)
:所有类函数都可以访问它(这与有何不同global (variable name)
?)
由于没有私有/受保护,所有内容都是公共的,因此从类内部访问的所有内容都可以从类外部访问。
还有其他我应该知道的细微差别吗?或者我已经基本了解了?
解决方案 1:
由于您问题中的列表不是 100% 清楚,我决定用一个简单的例子来解释。它还包括一些__something
您列表中未提及的内容,例如变量。
class Test:
a = None
b = None
def __init__(self, a):
print self.a
self.a = a
self._x = 123
self.__y = 123
b = 'meow'
一开始,a
和b
只是为类本身定义的变量——可通过Test.a
和访问,Test.b
并且不特定于任何实例。
创建该类的实例时(导致__init__
被执行):
print self.a
找不到实例变量,因此返回类变量self.a = a
:创建了一个新的实例变量a
。这会隐藏类变量,因此self.a
现在将引用该实例变量;要访问类变量,现在必须使用Test.a
赋值会
self._x
创建一个新的实例变量。它被视为“不属于公共 API”(又称受保护),但从技术上讲,它的行为并没有什么不同。赋值给 会
self.__y
创建一个名为 的新实例变量_Test__y
,也就是说,它的名称是混乱的,因此,除非您使用混乱的名称,否则无法从类外部访问它。这可以用于“私有”变量。赋值创建一个局部变量。由于它没有保存在实例、类或全局范围内,因此除了函数
b
之外,其他地方都无法访问它。__init__
解决方案 2:
在类的顶层声明变量就像声明静态变量或类变量一样。使用 self 限定它是声明实例变量。类变量可以通过引用类名(例如Class.x = 5
)来修改,并且所有实例都会继承这些更改。实例变量是实例私有的,只能由该实例修改。
您可以使用下划线实现某种程度的访问控制。请参阅Python 教程中的私有变量。按照惯例,以一个下划线开头的变量(例如)_foo
是 API 的非公共部分,而以两个下划线开头__foo
的名称(例如)将被误认为是_classname__foo
。
解决方案 3:
虽然已经回答过了,但我还是想针对您的问题补充一些评论:
在类中(函数外部)声明一个变量:所有类函数都可以访问它(基本上是一个公共变量)
这就像一个静态变量,可以使用类名调用。这些变量可供所有函数使用,任何函数都可以修改它并打印它。
在类内的函数内声明一个变量:只有该函数可以访问它(它在该函数的范围内):
如果变量声明self
时不使用 ,则只能在该函数内访问,就像局部变量一样。但是,如果使用self
like声明变量self.var= 'somevalue'
,则可以通过任何对象访问,但不能通过类名访问。
在类内部的函数中声明一个变量
self.(variable name)
:所有类函数都可以访问它(这与有何不同global (variable name)
?)
请参阅上面部分的答案。
由于没有私有/受保护,所以所有内容都是公开的,因此类内部可访问的所有内容都可以从类外部访问
是的,但是我们可以使用单下划线来告诉世界这个变量是私有的,但从技术上讲,这实际上并不意味着它是私有的。
解决方案 4:
我们可以使用其中的范围:情况 1:在类中
class test:
def __init__(self, a):
self.__elements = a
def change_a(self): self.__elements = 5
情况 2:课堂外
t = test(5)
这将通过 object._classname__privatevaribalename 访问
print(t._test__elements)
这将打印出
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)