gpt4 book ai didi

Python 等效于 C++ 成员指针

转载 作者:太空狗 更新时间:2023-10-30 00:27:49 26 4
gpt4 key购买 nike

什么相当于 Python 中的 C++ 成员指针?基本上,我希望能够在 Python 中复制类似的行为:

// Pointer to a member of MyClass
int (MyClass::*ptMember)(int) = &MyClass::member;

// Call member on some instance, e.g. inside a function to
// which the member pointer was passed
instance.*ptMember(3)

跟进问题,如果成员是属性而不是方法怎么办?是否可以在不指定实例的情况下存储/传递指向属性的“指针”?

一种方法显然是传递一个字符串并使用eval。但是有更清洁的方法吗?

编辑:现在有几个非常好的答案,每个答案都可以根据上下文提供有用的信息。我最终使用了我的答案中描述的内容,但我认为其他答案对根据问题主题来到这里的任何人都非常有帮助。所以,我现在不接受任何一个。

最佳答案

假设一个 Python 类:

class MyClass:
def __init__(self):
self.x = 42

def fn(self):
return self.x

C++ 指向成员函数的指针是这样的:

fn = MyClass.fn

您可以从一个类(上面的 MyClass.fn)中获取一个方法,它变成一个普通函数!函数和方法的唯一区别是第一个参数习惯上叫做self!所以你可以像在 C++ 中那样使用一个实例来调用它:

o = MyClass()
print(fn(o)) # prints 42

然而,通常更有趣的事情是您还可以获取绑定(bind)成员函数的“地址”,这在 C++ 中不起作用:

o = MyClass()
bfn = o.fn
print(bfn()) # prints 42, too

关于属性的跟进,这里已经有很多答案可以解决这个问题,前提是它仍然是一个。

关于Python 等效于 C++ 成员指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com