- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在实例方法的文档中指出:
Methods also support accessing (but not setting) the arbitrary function attributes on the underlying function object.
但我似乎无法验证该限制。我尝试设置任意值和函数的“特殊属性”之一:
class cls:
def foo(self):
f = self.foo.__func__
f.a = "some value" # arbitrary value
f.__doc__ = "Documentation"
print(f.a, f.__doc__)
执行时,不会产生任何错误,并且输出符合预期:
cls().foo() # prints out f.a, f.__doc__
我对文档的误解是什么?
最佳答案
您误解了所说的内容。它表示您可以从方法访问底层函数对象的属性,但不能设置属性!
>>> class Foo:
... def foo(self):
... self.foo.__func__.a = 1
... print(self.foo.a)
... self.foo.a = 2
...
>>> Foo().foo()
1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in foo
AttributeError: 'method' object has no attribute 'a'
注意如何foo.a
当您将其设置为 __func__
时会更新值,但不能直接使用 self.foo.a = value
设置它.
因此函数对象可以随意修改,方法wrapper仅提供对底层函数属性的只读访问。
关于python - 在 __func__ 上设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528867/
名为 __func__ 的宏的存在是 C99 的一部分,其意图很明确,但它在给定函数中扩展为标准化的确切文本吗? 最佳答案 是的。宏被定义为扩展为函数的名称。 C11,§6.4.2.2 The ide
我正在尝试创建一个宏,该宏将根据调用宏的函数名称修改数据结构中的字段,请参见下文: #define REGISTER(func_name) data.func_name##_n++ struct da
#include char* __func__ = "hello"; void myfunc(void) { printf("%s\n", __func__); } int mai
我正在用 C++ 实现一个日志处理程序,它工作得很好,但是我发现有一件事是可用的,那就是记录器从中获取输出的地方。 我想这并不是什么大问题,但我偶然发现了 __func__ 标识符,它基本上会保留当前
我正在阅读 C/C++ 中的 __FUNCTION__/__func__(它们用于打印使用它们的函数的名称)。我读到的每个地方都说这些是宏,在预处理时被替换。因此,我使用命令 gcc -E prog.
#include void someFunc(void) { printf("%s\n"), __func__); } 每次调用该函数时都会打印: someFunc Java 的等价物是什么?
我在评论中看到使用 __func__ 存在安全风险。我需要了解这是怎么回事? 最佳答案 使用 __func__ 揭示二进制文件中的函数名称,从而减轻有权访问二进制文件的攻击者的工作。 关于c - __
如果我们在 C (C99/C11) 和 C++ 中的函数之外使用预定义变量 __func__ 会发生什么? #include const char* str = __func__; int main
我正在尝试通过将字符串存储在特殊部分 (__dlog) 来向 ELF 可执行文件添加元数据。当前的方法使用(滥用?)内联汇编来存储字符串并且几乎可以按预期工作。 #include #include
在实例方法的文档中指出: Methods also support accessing (but not setting) the arbitrary function attributes on t
大多数编译器都支持一些特殊的宏,例如 __FUNC__ 或 __PRETTY_FUNCTION__ 但我想知道如何在编译时验证它们是否可用,有这个来自 boost/current_function.h
谁能解释一下 Python datamodel reference 中关于用户定义函数 的以下部分是什么?是关于? When a user-defined method object is creat
在我正在处理的项目中给出以下代码: /* Pre-definitions in a pre-definitions file to be included in the project */ #ifd
我正在使用 gcc 编译 C99 代码。我想编写一个宏,它将返回一个包含函数名称和行号的字符串。 这是我的: #define INFO_MSG __FILE__ ":"__func__"()" 但是
我正在尝试构建一个调试日志消息函数,用于记录调用日志消息的文件、行和函数。 #define DEBUG_PANIC(p) CLogging::Debuglogf( "Debug marker (%s)
我是python新手,对python 2.7中的__func__不太了解。 我知道当我这样定义一个类时: class Foo: def f(self, arg): print
对于 gcc 项目,__FUNCTION__、__FILE__ 和 __func__ 返回的指针是否保证指向持久内存? (也就是说,我可以安全地引用另一个函数范围内的指针吗?)我知道 __func__
我想写一个 C 宏来接受这个: int foo() { MY_MACRO } 并将其扩展为: int foo() { _macro_var_foo++; } 我发现我不能使用 __func__
“C”标准是否支持类似于 __func__ 的函数参数名称? 最佳答案 不,C99 标准有以下内容: 6.10.8 Predefined macro names The following macro
我想定义一个宏来连接__func__(或__FUNCTION__)和__LINE__: 以下工作正常: // macro_test.cc #include #define STR2(X) #X #d
我是一名优秀的程序员,十分优秀!