小编hex*_*ain的帖子

如何区分函数和类方法?

如果一个变量指的是一个函数或一个类的方法,我怎么能找到它是哪一个,并得到了类类型的情况下,特别是当类仍然被宣布为在给定的例子一个类的方法.

例如.

def get_info(function_or_method):
    print function_or_method

class Foo(object):
    def __init__(self):
        pass

    get_info(__init__)

def bar():
    pass

get_info(bar)
Run Code Online (Sandbox Code Playgroud)

在David和JF Sebastian的前两个回复之后更新问题 为了再次强调JF Sebastian提到的一个观点,我希望能够在类中声明函数时区分它(当我得到的类型是函数时而不是绑定或未绑定的方法).即.在第一次调用get_info(__init__)发生的地方,我希望能够检测到它的方法被声明为类的一部分.

这个问题出现了,因为我在它周围放了一个装饰器,它获得了init函数的句柄,我实际上无法弄清楚方法是在一个类中声明还是作为一个独立的函数

python reflection metaprogramming

6
推荐指数
3
解决办法
1784
查看次数

在 C 和 Pascal 中禁用 system() 和 exec() 函数

通过使用任何编译器参数或修改头文件/单元文件,有没有办法在 C/C++ 和 Pascal 中禁用system()exec()运行?(这是一个窗口)

我试过使用-Dsystem=NONEXISTgcc 和 g++ 但#include <cstdio>导致编译错误。

编辑:当然我知道他们可以#undef system用来绕过防御,所以我试图注释掉systemstdlib.h 中的函数行,但这也不起作用。

EDIT2(评论):这是一个系统,用户提交他们的程序,服务器用不同的输入数据编译和运行它,然后将程序输出与预先计算的标准输出进行比较,看看程序是否正确。现在一些用户发送代码,比如system("shutdown -s -t 0");关闭服务器。

服务器运行的是Windows系统,所以我没有任何chroot环境。此外,服务器应用程序是封闭源代码的,因此我无法控制用户提交的程序的执行方式。我能做的是修改编译器命令行参数并修改头文件。

c c++ pascal system-calls

4
推荐指数
1
解决办法
1556
查看次数

标签 统计

c ×1

c++ ×1

metaprogramming ×1

pascal ×1

python ×1

reflection ×1

system-calls ×1