防止为类或模块创建新属性

2023-11-29

我在SO上看到这个问题防止在外部创建新属性init它展示了如何防止向类的对象添加新属性。

我希望整个类甚至整个加载的模块具有相同的行为。

示例类:

class Klass:
     a = 0
     b = 1

另一个模块:

from Klass import Klass

Klass.c = 2 # this should raise an error

这可能吗?


如果您试图阻止修改类本身,您可以创建一个元类来定义__setattr__类的方法。

class FrozenMeta(type):
    def __new__(cls, name, bases, dct):
        inst = super().__new__(cls, name, bases, {"_FrozenMeta__frozen": False, **dct})
        inst.__frozen = True
        return inst
    def __setattr__(self, key, value):
        if self.__frozen and not hasattr(self, key):
            raise TypeError("I am frozen")
        super().__setattr__(key, value)

class A(metaclass=FrozenMeta):
    a = 1
    b = 2

A.a = 2
A.c = 1 # TypeError: I am frozen
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止为类或模块创建新属性 的相关文章

  • 我如何在 python 2.6 中测试抽象方法

    我有一个抽象类 import abc class Hello object metaclass abc ABCMeta abc abstractmethod def add self foo pass abc abstractmethod
  • tensorflow Protobuf编译问题

    我想为 google 对象检测 API 编译 protobuf 库 我按照官方教程输入protoc object detection protos proto python out 然后我得到的是 object detection prot
  • CVXPY 二次规划; ArpackNoConvergence 错误

    我尝试使用 Python 包 CVXPY 来解决第一种形式的凸二次规划问题 https www cvxpy org examples basic quadratic program html https www cvxpy org exam
  • 如何在 Windows 10 上使用 python 3.7 的 anaconda 包?

    我使用的是 Windows 10 Pro 64 位版本 我从此页面下载Anaconda3 2019 03 Windows x86 64 exe https www anaconda com distribution https www an
  • Pandas 字符串提取所有匹配项

    我正在学习 pandas 系列字符串方法中的正则表达式操作 我能够从字符串中提取第一个数字 但我的正则表达式与第二个数字不匹配 如何捕获这两个数字 注意第二行 第二个元素在这里是 NAN CODE import pandas as pd d
  • scipy.misc.imshow RuntimeError('无法执行图像视图')

    我正在测试scipy misc imshow https docs scipy org doc scipy 0 15 1 reference generated scipy misc imshow html我得到了运行时错误 无法执行图像查
  • 如何移动我的图像? python 3.10.4 pygame

    我会移动我的图像 图像是matiskinfinal png 我尝试将像素添加到 x 或其他我不知道它是什么的东西 因为我真的是 python 的初学者 pygame但是是 x x 变化 但图像没有移动 import os import py
  • 蜘蛛内的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
  • 如何从 Lua 调用 Python 函数?

    我想从我的 lua 文件运行 python 脚本 我怎样才能实现这个目标 Example Python代码 sum py file def sum from python a b return a b Lua code main lua f
  • Django 未在 404 页面上应用应用程序中的 CSS 文件

    姜戈3 0 8 Python 3 7 x 我有一个包含一些应用程序的 Django 项目 我正在尝试为 400 403 404 500 错误制作一些 默认 错误页面 我已经这样做了 并显示了适当的模板 但没有任何样式或 JS 在 404 错
  • pandas to_sql sqlalchemy 与 secure_transport 的连接

    我正在尝试将数据发送到具有 require secure transport ON 的服务器上的 mysql 数据库 当我尝试使用以下代码连接到它时 import pandas as pd import pymysql from sqlal
  • 如何在数据框中绘制包含三列的无向图,形成 3 种不同类型的节点(三方)?

    我正在尝试使用三个不同的列表绘制网络的可视化 这三个列表形成 3 种类型的节点 下面的代码正在运行 如图所示 需要两个列表 用户 ID 评分 但是 我希望我的图表是三部分的 即 user userId review ratings prod
  • 如何测试列表中多个值的成员资格

    我想测试两个或多个值是否在列表中具有成员资格 但我得到了意外的结果 gt gt gt a b in b a foo bar a True 那么 Python 可以同时测试列表中多个值的成员资格吗 这个结果意味着什么 See also How
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • Python 中的十进制到二进制半精度 IEEE 754

    我只能使用以下命令将十进制转换为二进制单精度 IEEE754struct pack模块 或者使用相反的方法 float16 或 float32 numpy frombuffer 是否可以使用 Numpy 将十进制转换为二进制半精度浮点数 我
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • 类路径和源路径之间的区别?

    我对类路径和源路径有这种困惑 我参考了这些链接 也是 但我没做对 参考 javac 的类路径和源路径选项之间的差异 sourcepath 与 classpath 关于自动重新编译 我无法发现 javac 的 classpath 和 sour
  • Firefox 扩展开发 - 数据存储 - Firefox 首选项是个好地方吗?

    我开发了一个 Firefox 插件 需要在本地计算机中保存一些用户数据 现在 我使用 Firefox 提供的文件系统功能在用户系统中创建一些文件夹和文件 可移植性是一个问题 我是为 Windows XP 设计的 但是 Vista 的文件夹结
  • 在准备好的 mysqli 语句中多次使用一个参数

    是否可以在准备好的参数中使用一个参数mysqli 多次声明仅绑定一次 像这样的东西 stmt mysqli gt prepare SELECT FROM user WHERE age BETWEEN 1 2 AND 1 2 stmt gt
  • 仅将字典的最新值添加到列表中[重复]

    这个问题在这里已经有答案了 通过 for 循环创建字典列表 我一直在尝试通过 for 循环创建字典列表 代码如下所示 a x y z b 1 2 3 dict1 superlist for i in range 0 len a dict1
  • javaassist 和 cglib 之间的区别

    我学习hibernate 我了解到hibernate已经停止使用cglib并切换到javaassist 我还了解到javaassist和cglib用于代理生成 所以我想知道这两者是如何工作的以及哪一个更好 他们的工作方式有什么区别 Cgli
  • 将 R 变量传递给 sql 语句

    有没有办法将 R 中定义的变量传递给 sqldf 包中的 SQL 语句 我必须运行下面的代码 并将 v 变量作为 v 传递给 sql select 语句 for i in 1 50 v lt i 450 temp lt sqldf sele
  • sys_brk 的对齐要求是什么

    我正在使用 sys brk 系统调用动态分配堆中的内存 我注意到 在获取当前中断位置时 我通常会得到与此类似的值 mov rax 0x0C mov rdi 0x00 syscall 结果是 rax 0x401000 该值通常按 512 字节
  • javascript 找不到图像文件(Rails 4 应用程序)

    我有一个 Ruby on Rails 4 应用程序 在app assets javascripts 我创建了一个文件map js在谷歌地图上绘制一些自定义标记 var marker new google maps Marker dragga
  • 对于不相等的列表,eq 返回 true

    我有一段奇怪的代码需要调试 我认为它应该抛出异常 但它却产生了完全奇怪的结果 将其简化为这两行 EDU gt gt A 0 0 A 0 0 EDU gt gt A 1 2 A 2 1 ans 1 为什么两个不相等的逗号分隔列表的比较是正确的
  • Python - 如何跳过特定的 JSON 元素?

    query pages 7412236 pageid 7412236 ns 0 title Steve Jobs extract p b Steven Paul b b Steve b b Jobs b u02c8d u0292 u0252
  • jQuery 中的 onHide() 类型事件

    有谁知道一个onHide jQuery 中的事件或类似的东西 I tried this bind hide function console log asdasda 但显然这不起作用 Edit 只是为了澄清 它是使用 CSS 隐藏的disp
  • 在同一脚本中启动并调用 Ruby HTTP 服务器

    我想知道如何启动 Ruby Rack 应用程序 例如 Sinatra 并在同一脚本中使用 Net HTTP 或类似方法调用它 当然我可以做类似的事情 require sinatra base require net http t Threa
  • 将 json 反序列化为 pojo,其中 json 字段具有不同的数据类型

    我正在尝试将 json 反序列化为 java pojo 但我无法理解应该如何开始创建一个可用于反序列化 json 的 java 对象 如下所示 links version 2 executionState completed outputs
  • Selenium WebDriver - Java - 单击按钮

    我正在尝试单击一些按钮 并使用 twitch 上的 关注 按钮作为示例 我使用 Selenium IDE 尝试获取按钮的 xpath 我得到的 xpath 是 span id ember637 a span 如果我转到 FireFox 并复
  • 具有缺失值的多元 LSTM

    我正在使用 LSTM 解决时间序列预测问题 输入包含多个特征 因此我使用多元 LSTM 问题是有一些缺失值 例如 Feature 1 Feature 2 Feature n 1 2 4 nan 2 5 8 10 3 8 8 5 4 nan
  • EACCES:权限被拒绝,打开 '/usr/local/lib/node_modules/npm/bin/npm-cli.js'

    你好 先生 我是 docker 新手 我正在使用 ubuntu budgie linux 20 04 我的 docker 版本是Docker version 18 09 9 build 1752eb3我已经使用 snap 包管理器安装了 d
  • 更改基本 MVVM 的当前实现以遵循 SOLID 模式

    我一直在使用在线提供的 MVVM 示例中通常提到的基本设计模式编写所有 MVVM 应用程序 我遵循的模式如下所述 Model 本节包括 DTO 类及其属性和接口 IDataService 等 public class Employee pu
  • python 3.6 与旧版本中的字典顺序

    当我运行它时 我需要按照这个确切的顺序打印这段代码 访客团队 访客评分 主队 主评分 预期获胜者 利润 tabulate final dict Visitor Team visitor team Visitor Rating visitor
  • document.getElements() 支持

    document getElements 函数的支持程度如何 此外 是否有一个 javascript 参考页面 其中包含详细的浏览器支持信息 我通常使用 mozilla 文档 但我想知道是否有更好的东西 我实际上找不到有关 document
  • 防止为类或模块创建新属性

    我在SO上看到这个问题防止在外部创建新属性init它展示了如何防止向类的对象添加新属性 我希望整个类甚至整个加载的模块具有相同的行为 示例类 class Klass a 0 b 1 另一个模块 from Klass import Klass