Python 类中的变量作用域

2023-11-30

在类中声明变量(在函数之外):所有类函数都可以访问它(基本上是公共变量)

在类内的函数内声明变量:只有该函数可以访问它(它在该函数的范围内)

声明一个变量self.(variable name)在类内的函数内部:所有类函数都可以访问它(这与global (variable name)?)

由于没有私有/受保护,所以一切都是公共的,因此从类内部访问的所有内容都可以从类外部访问。

还有其他我应该知道的细微差别吗?或者我已经了解了吗?


由于您问题中的列表并不是 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 and b仅是为类本身定义的变量 - 可通过Test.a and Test.b并且不特定于任何实例。

创建该类的实例时(这会导致__init__正在执行):

  • print self.a找不到实例变量,因此返回类变量
  • self.a = a:一个新的实例变量a被建造。这会遮蔽类变量,因此self.a现在将引用实例变量;要访问您现在必须使用的类变量Test.a
  • 分配给self._x创建一个新的实例变量。它被认为“不是公共 API 的一部分”(又名受保护),但从技术上讲它没有不同的行为。
  • 分配给self.__y创建一个名为的新实例变量_Test__y,即它的名称被损坏,因此除非您使用损坏的名称,否则无法从类外部访问它。这可用于“私有”变量。
  • 分配给b创建一个局部变量。它不能从任何地方获得,除了__init__函数,因为它不保存在实例、类或全局范围中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 类中的变量作用域 的相关文章

  • 只使用 Django 的某些部分?

    我喜欢 Django 但对于一个特定的应用程序 我只想使用它的一部分 但我对 Django 的内部工作原理还不够熟悉 所以也许有人可以指出我必须做什么的正确方向查看 具体来说 我想使用 模型和数据库抽象 The 缓存API http doc
  • 如何忽略传递给函数的意外关键字参数?

    假设我有一些功能 f def f a None print a 现在 如果我有一本字典 比如dct a Foo 我可以打电话f dct 并得到结果Foo打印 但是 假设我有一本字典dct2 a Foo b Bar 如果我打电话f dct2
  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • 蜘蛛内的Scrapyd jobid值

    Scrapy 框架 Scrapyd 服务器 我在获取蜘蛛内部的 jobid 值时遇到一些问题 将数据发布到后http localhost 6800 schedule json http localhost 6800 schedule jso
  • 我应该为 MySQL 使用什么 python 3 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 据我所知 MySQLdb 仍然没有移植到 Python 3 pypy 上似乎有另一个名为 PyMySQL
  • 在 Python 中绘制分类数据的三个维度

    我的数据包含三个我试图可视化的分类变量 城市 五个之一 职业 四种之一 血型 四种之一 到目前为止 我已经成功地以一种我认为易于使用的方式对数据进行了分组 import numpy as np pandas as pd Make data
  • Django 未在 404 页面上应用应用程序中的 CSS 文件

    姜戈3 0 8 Python 3 7 x 我有一个包含一些应用程序的 Django 项目 我正在尝试为 400 403 404 500 错误制作一些 默认 错误页面 我已经这样做了 并显示了适当的模板 但没有任何样式或 JS 在 404 错
  • OpenCV - 我需要将彩色图像插入黑白图像并且

    我用以下代码将黑白图像插入彩色图像 没问题 face grey cv cvtColor face cv COLOR RGB2GRAY for row in range 0 face grey shape 0 for column in ra
  • 是否有更矢量化的方法来沿轴执行 numpy.outer ?

    gt gt gt x np array a0 a1 b0 b1 gt gt gt y np array x0 x1 y0 y1 gt gt gt iterable np outer x i y i for i in xrange x sha
  • python:是否有用于对输入流进行分块的库函数?

    我想对输入流进行分块以进行批处理 给定一个输入列表或生成器 x in 1 2 3 4 5 6 我想要一个能够返回该输入块的函数 说 如果chunk size 4 then x chunked 1 2 3 4 5 6 这是我一遍又一遍地做的事
  • 根据给定列表中的值替换列中的值[重复]

    这个问题在这里已经有答案了 我在数据框中有一列 仅允许定义列表中存在的值 例如 给定列表 l1 1 2 5 6 如果列表中不存在列中的值 我需要将每个值替换为 0 column Expected column 1 1 5 5 2 2 3 0
  • openERP(odoo)中的继承

    我是 openERP 的新手 正在接受面试 请解释一下openERP中不同类型继承的想法 我认为总共有3种类型 请从面试的角度 用非常简单的方式解释一下 P S 我熟悉简单继承的概念 继承 继承机制用于创建可重用性的思想 可重用性意味着在任
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法
  • 如何将 fields 参数传递到 Google Drive Python API 调用中

    I have results drive service files list body execute where body q query string maxResults 1 为了提高性能 我想限制返回的字段 如下所述 https
  • 如何保持 python 3 脚本 (Bot) 运行

    不是母语英语 抱歉 英语可能很蹩脚 我也是编程新手 您好 我正在尝试使用 QueryServer 连接到 TeamSpeak 服务器来创建机器人 经过几天的努力 它有效 只有 1 个问题 而我却被这个问题困扰了 如果您需要检查 这是我正在使
  • Flask 扩展未在 app.extensions 中注册

    我想访问在我的 Flask 应用程序上注册的一些扩展 我尝试使用app extensions 但我初始化的一些扩展不在字典中 from flask import current app current app extensions get
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • VSCode无法切换matplotlib后端:ImportError:无法加载需要“qt5”交互框架的后端“Qt5Agg”

    我只想通过在 VSCode 中运行 Python 来进行绘图 但结果失败了 我无法将后端从 agg 切换到 Qt5Agg 但是 我可以在 VSCode 的终端中轻松执行此操作 VSCode集成终端中的问题如下所示 我尝试了各种解决方案但失败
  • 在多个图表上绘制一条线

    I don t know how this thing is called or even how to describe it so the title may be a little bit misleading The first a

随机推荐

  • 如何使用 Ransack 和 Rails 构建具有范围的可点击链接

    我需要在我的应用程序中将一些范围作为可点击的链接 这将允许用户根据需要更改他们看到的数据 使用 Ransack 及其 ransackable scopes 功能我非常接近 当用户单击范围时 我确实需要保留 Ransack 所做的任何过滤 我
  • C#如何获取不同国家的当前时间

    C 如何获取不同国家的当前时间通过使用以下任何参数 1 国家名称 2 国家时区 这是为了Windows WPF 应用程序 不像网络 有人可以回答这个问题吗 提前致谢 你应该看看TimeZoneInfo类 特别是在TimeZoneInfo C
  • 用正斜杠替换反斜杠 Javascript

    我使用向后斜杠从 API 获取一些图像 当我尝试在页面上显示这些图像时 它在 Chrome 上工作正常 但在 FireFox 和 IE 等其他浏览器上则不起作用 经过一番谷歌搜索后 我发现我有用正斜杠传递 URL 所以我尝试替换它 但它不起
  • VBS SendKeys 未发送“(”字符

    我是新来的 所以请放轻松 我在使用下面的 VB 脚本在记事本上输入数据时遇到了奇怪的问题 我使用 SendKeys 发送到记事本的代码每次都会更改 我注意到脚本工作得很好 除非我发送的文本包含 或 如果发生这种情况 我会收到错误 无效的过程
  • 使用 Graph API 获取 Facebook 帖子

    如何找回此信息并在我们的网站上显示 我试过了this但没有运气 请帮忙 问题涉及到 getJSON 作为文档状态 请求无法成功检索来自不同域 子域或协议的数据 我没有看到您提到要使用哪种语言来获取这些帖子 但这里有两个简单的示例说明如何使用
  • TD 中的 PIVOT 实施

    我想要透视我的数据 并且我知道 Teradata 16 中有透视功能 我不知道如何使用它 我知道其他方法 如 max case 但我的数据集很大 所以我无法使用它 谁能告诉我如何在这里使用pivot SERV PROVIDER ID CAL
  • 如何将值从 HTML 页面传递到 java applet?

    我尝试过使用 javascript 传递值 如下所示
  • 使用 /clr 或 /clr:pure 编译时出现错误 不受支持

    我有一个 C dll 我将其称为 Dll A 其中我使用过 include
  • 如何降级使用tensorflow-gpu安装的hdf5

    最近我尝试安装tensorflow gpu以下https www youtube com watch v tPq6NIboLSc这个视频 但是当我尝试导入tensorflow 或keras 时 我的内核崩溃并给出以下错误消息 C Users
  • 是否可以通过 GPS 或 GLONASS 知道我的位置?

    假设设备同时支持 gps 和 glonass 硬件级别支持 现在 当我通过 android location API 获取位置时 是否可以知道该位置来自的硬件 LocationManager locationManager Location
  • UICollectionView UIRefreshControl 在访问不同的视图后不会动画

    我有一个 UIRefreshControl 连接到一个 UICollection 它是这样定义的 用于拉动刷新 self refreshControl UIRefreshControl alloc init self refreshCont
  • GetCookie 提取信息到字符串

    我正在尝试从我需要的 Set Cookie 获得的 cookie 中获取数字信息 om lv 1341532178340 xrs 这里的数字 这就是我想出的 string key ArrayList list new ArrayList f
  • React-Native、Android、Genymotion:ADB 服务器未确认

    我正在 Mac 上使用 React Native Android 和 Genymotion 当我跑步时react native run android我在启动操作结束时得到以下几行 04 54 40 E adb error could no
  • 查找供应每个零件的供应商的 sids

    Suppliers sid sname address Parts pid pname colour Catalog sid pid cost 找到所有供应每个零件的供应商 的答案是 SELECT C sid FROM Catalog C
  • 如何获取配对的蓝牙设备

    我想创建一个应用程序 在我的应用程序中向我显示已配对的设备 例如 在检测并显示我之前与我配对的任何设备 下次我也想寄一个NSString like hello 至配对设备 我在谷歌搜索 我很困惑 请首先告诉我如何将设备与我的手机配对 然后告
  • 使用 sudo 更改根目录中的文件[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个脚本来配置resolv conf and etc network interfaces自动地 我以 sudo 身份运行命令 但收到 权限被拒绝 错误 sudo apt get assume ye
  • 如何在循环中使用 numpy.dstack?

    我正在尝试通过使用 2D 数组和 np dstack 来填充数组 m1 np array 1 1 1 1 m2 np array 2 2 2 2 m3 np array 3 3 3 3 lst m1 lst np dstack lst m2
  • 查找 Scikit-learn 分类器中最常见的术语 [重复]

    这个问题在这里已经有答案了 我正在关注Scikit 学习文档中的示例 where CountVectorizer用于某些数据集 Question count vect vocabulary viewitems 列出所有术语及其频率 如何按出
  • 如何在 R 中读取和命名不同的 CSV 文件

    我想对几个 csv 文件进行一些比较 因此我编写了以下代码来读取我拥有的不同 csv 文件 path lt C data files lt list files path path pattern csv for file in files
  • Python 类中的变量作用域

    在类中声明变量 在函数之外 所有类函数都可以访问它 基本上是公共变量 在类内的函数内声明变量 只有该函数可以访问它 它在该函数的范围内 声明一个变量self variable name 在类内的函数内部 所有类函数都可以访问它 这与glob