如何在boost :: python中向模块添加属性?

Ale*_*x B 10 c++ python boost boost-python

您可以使用getter和setter将属性添加到类中(在简单的情况下):

class<X>("X")
    .add_property("foo", &X::get_foo, &X::set_foo);
Run Code Online (Sandbox Code Playgroud)

那么你可以像这样在python中使用它:

>>> x = mymodule.X()
>>> x.foo = 'aaa'
>>> x.foo
'aaa'
Run Code Online (Sandbox Code Playgroud)

但是如何将属性添加到模块本身(而不是类)?

scope().attr("globalAttr") = ??? something ???
Run Code Online (Sandbox Code Playgroud)

def("globalAttr", ??? something ???);
Run Code Online (Sandbox Code Playgroud)

我可以使用上面两种方式添加我的类的全局函数和对象,但似乎无法像在类中一样添加属性.

Mat*_*hen 3

__getattr__并且__setattr__不会在模块上调用,因此如果不进行黑客攻击(例如在模块字典中存储类),您就无法在普通 Python 中执行此操作。鉴于此,Boost Python 中也不太可能有一种优雅的方法来做到这一点。