- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用过这个stackoverflow question尝试实现一个管理自定义对象属性写入的manager
对象。我知道我需要通过在我的文件中定义 _exposed_
来公开像 __getattribute__
、__setattr__
和 __delattr__
这样的神奇方法。代理类。但是,当我尝试设置自定义对象的可下标属性的元素值时,它保持不变。
查看multiprocessing
文档,我在任何地方都找不到前面提到的帖子中提到的multiprocessing.managers
子类NamespaceProxy
。我一方面可以导入它;另一方面我可以导入它。但是,我一直怀疑它没有正确实现。
以下是我尝试更改归因于自定义类的对象的数组元素的值的方法:
from multiprocessing.managers import BaseManager, NamespaceProxy
import numpy as np
class TestClass(object):
def __init__(self, a):
'''
Args:
a (np.ndarray): the array that needs to be changed
'''
self.a = a
class TestProxy(NamespaceProxy):
# exposes the magic methods for TestProxy objects needed for setting their attributes
_exposed_ = ('__getattribute__', '__setattr__', '__delattr__')
class MyManager(BaseManager):
pass
if __name__ == '__main__':
MyManager.register('test', TestClass, TestProxy)
manager = MyManager()
manager.start()
arr = np.array([0,0,0,0])
managed_obj = manager.test(arr)
managed_obj.a[0] = 1
print(managed_obj.a)
# Console: [0 0 0 0]
# Expected ouput: [1 0 0 0]
编辑:我能够使用类似的内容更改a
的实际值
arr2 = np.array([0])
managed_obj.a = arr2
print(managed_obj.a)
# Console : [0]
但是,我仍然不知道如何更改a
元素的值。
最佳答案
我还没有弄清楚如何(或是否)通过某种通用的 __setitem__
方法来实现这一点 - 我最初的目标 - 但这里是如何定义一个自定义方法(名为 my_setitem()
下面)似乎能够更改数组中索引元素的值。
它不允许您按照自己的意愿直接更改代理对象的可订阅属性的值,但它确实展示了一种更改它们的方法。
我认为这将在 Python 3.7 中工作,因为我试图避免做任何只在 v3.8 中工作的事情有一个异常(exception),即这个 new feature添加到 f 字符串支持对于调试来说非常方便 - 但如果需要的话,它应该相对容易删除/替换。
from multiprocessing.managers import BaseManager, NamespaceProxy
import numpy as np
from functools import partial
print = partial(print, flush=True) # Change default.
class TestClass(object):
def __init__(self, a):
'''
Args:
a (np.ndarray): the array that needs to be changed
'''
print(f'TestClass.__init__ called, {a = }')
self.a = a
def my_setitem(self, name, index, value):
print(f'in TestClass.my_setitem()')
attr = getattr(self, name)
attr[index] = value
class TestProxy(NamespaceProxy):
# exposes the magic functions for TestProxy objects needed for setting their attributes
_exposed_ = ('__getattribute__', '__setattr__', '__delattr__', 'my_setitem')
def my_setitem(self, name, index, value):
print(f'in TestProxy.my_setitem()')
callmethod = object.__getattribute__(self, '_callmethod')
return callmethod('my_setitem', (name, index, value))
class MyManager(BaseManager):
pass
if __name__ == '__main__':
MyManager.register('Testclass', TestClass, TestProxy)
manager = MyManager()
manager.start()
arr = np.array([0,0,0,0])
print(f'calling manager.Testclass(arr)')
managed_obj = manager.Testclass(arr)
print(f'result: {managed_obj = }')
print()
# managed_obj.a[0] = 42 # The problem, doesn't work.
name = 'a'
index = 1
# index = slice(0, 2) # slices also work
print(f'executing managed_obj.my_setitem({name=}, {index=}, 42)')
managed_obj.my_setitem(name, index, 42)
print(f'result: {managed_obj.a = }') # -> result: managed_obj.a = array([ 0, 42, 0, 0])
这是它产生的输出(在我的系统上使用 Py 3.8.0 运行):
calling manager.Testclass(arr)
TestClass.__init__ called, a = array([0, 0, 0, 0])
result: managed_obj = <TestProxy object, typeid 'Testclass' at 0x4b3f520>
executing managed_obj.my_setitem(name='a', index=1, 42)
in TestProxy.my_setitem()
in TestClass.my_setitem()
result: managed_obj.a = array([ 0, 42, 0, 0])
关于python - 如何设置代理对象的可下标属性的元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775802/
是否可以创建一个可以使用显式参数标签调用的下标? struct MyType { subscript (label: Bool) -> String? { return nil
我正在尝试制作一个包含带有上标和/或下标的文本的超链接。我找到了两种方法来做到这一点,它们都很糟糕。 解决方案#1:使用 Typography.Variants .这为某些字体提供了极好的上标……。
在这里! 我想在 geom_bracket 中包含一个带下标的标签在 ggplot2 .我尝试了不同的方式,但没有人成功(评论中的尝试): library(ggplot2) ggplot(data =
我正在尝试让 graphviz 启动并工作,我迫切需要节点标签中的下标。不幸的是,通过浏览无数关于类似问题的帖子,我似乎适合所有建议的解决方案,但仍然不起作用。这是我的代码: digraph G{
抱歉格式问题,我从来没有真正在这样的论坛上发帖,所以我必须学习一下操作方法。 我的问题是:我正在编写一个模板类,我想通过多种 [] 运算符访问我的容器。我读了一些关于这个主题的内容,所以我已经能够重载
我知道我们可以像在 matplotlib 中生成单个下标 $r_i$ 会给我一个下标为“i”的r。 但我想生成一个包含 3 或 4 个字母的下标,例如 r_ijk 应该给我一个带有“ijk”作为下标的
this[5] 有什么作用?我是否调用了某种未定义的行为?关于: std::vector foo{this, this + 5u}; 这个有用吗?我想知道指针算法对 this 的影响是什么。这是一个测
我从 visual studio 得到了一些奇怪的行为,关于以下代码片段,错误列表显示了 E0349 的几个实例:没有运算符“[]”匹配这些操作数。 Intellisense 似乎暗示类型不匹配,但正
我想为我的数组类提供 PHP 样式的 push_back 功能: arrayT arr; arr[] = 10; // == std::vector::push_back() 和 arrayT::op
下标 (subscripts)可以定义在类(class)、结构体(structure)和枚举(enumeration)中,是访问集合(collection),列表(list)或序列(sequence)
我正在使用traindata训练svm。 (R中的e1071软件包)。以下是有关我的数据的信息。 > str(train) 'data.frame': 891 obs. of 10 variab
#include int main(){ int arr[7] = {0,1,2,3,4,3,2}; arr[0]++[arr]++[arr]++[arr]++[arr]++[arr]
如果我想以特定用户的身份调用主脚本文件中的另一个 shell 脚本,我该怎么做呢?子脚本似乎失去了它正在运行的用户的上下文,我还没有找到任何有用的子脚本技术。 例如:war-install.sh if
这个问题在这里已经有了答案: Why isn't there an operator[] for a std::list? (4 个答案) 关闭 5 年前。 我有这些类型定义: typedef pa
我在 NSUserdefaults 中获取字典的字符串时遇到问题,这是我的代码。我不知道似乎是什么问题: static func getItemInUserDefaultsDictionary(key
我正在尝试执行以下代码并收到错误 Could not find member 'subscript on Xcode6 var b:[[Float]] = [[1,2]] var i2 = 0 //
我尝试运行的代码: std::string genBlankName(std::vector &posts) { std::string baseName = "New Post ";
1 1 A_{3} 2 2 C_{2} 3 3 ^{5}C_{1} 我有一个这样的输入文件要绘制。第三列是该点上的标签( latex 格式)。我如何在绘图上显示这些标签,就像它们在 latex 编译后
我在这里搜索了一段时间,之前的问题/答案部分回答了我的问题。我正在学习 R,来自 Matlab。正如标题所说,我有一个关于情节注释的问题。在 Matlab 中,绘制包含各种数据格式的注释非常简单,我正
我想将一些化学数据放入表格的列中。但在现有表格中,下标显示为普通字符。其中一些显示为问号。我应该怎么做才能解决它? 当我输入这段代码时 SELECT N'H' + NCHAR(0x2082) + N
我是一名优秀的程序员,十分优秀!