我的问题受到了这个问题的启发。
问题在于 3 级类模型 - 终止类(3 级)仅应存储在注册表中,但 2 级是干扰性的并且也已存储,因为它们是 1 级的子类。
我想通过使用元类摆脱 1 级类。通过这种方式,只剩下 2 个类级别 - 每组设置及其子项的基类 - 从相应的基类继承的各种设置类。元类用作类工厂 - 它应该创建具有所需方法的基类,并且不应显示在继承树中。
但我的想法行不通,因为似乎__init_subclass__方法(方法的链接)没有从元类复制到构造类。与__init__方法相反,这符合我的预期。
代码片段?1、模型的基本框架:
class Meta_Parent(type):
pass
class Parent_One(metaclass=Meta_Parent):
pass
class Child_A(Parent_One):
pass
class Child_B(Parent_One):
pass
class Child_C(Parent_One):
pass
print(Parent_One.__subclasses__())
Run Code Online (Sandbox Code Playgroud)
输出:
[<class '__main__.Child_A'>, <class '__main__.Child_B'>, <class '__main__.Child_C'>]
Run Code Online (Sandbox Code Playgroud)
我想为上述模型的子类化过程添加功能,所以我重新定义了type's 的内置函数__init_subclass__:
代码片段?2.
class Meta_Parent(type):
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
print(cls)
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,现在每个由Meta_Parent元类(例如,Parent_One)构造的新类都应该有__init_subclass__方法,因此,当每个类都从这个新类继承时,应该打印子类名称,但它什么也不打印。也就是说,__init_subclass__当继承发生时我的方法不会被调用。
如果Meta_Parent元类是直接继承的,它就可以工作:
代码片段?3. …
我写了一个程序来计算传递给execve系统调用的参数的总大小。
我已经用最大参数大小测试了这个程序,期望只有在超过限制时才会发生“参数列表太长”错误ARG_MAX。在我看来,命令行的最大总大小应该尽可能接近ARG_MAX限制,即不能在不超过此限制的情况下添加额外的参数(文件名)。
但我看到了另一种行为:“未使用”字节的数量以不可预测的方式波动,而环境和程序名称保持不变,只有参数数量发生变化。
问题:
程序
计数算法如下:
尺寸argv+ 尺寸envp+ 尺寸argc
的argv是一个指针阵列,以字符串(指针char),因此循环通过此阵列,并加入到一个结果字符串的长度,牢记每个由NULL字节结束。然后将它们的指针添加到结果 - 指针的大小为 8 字节。因此:the number of pointers * 8+lengths of strings (each with a NULL byte)
与envp- 字符串长度与 NULL 字节和指针几乎相同。但是最后一个指针通过指向 NULL 字节来表示数组的末尾,因此将其添加到 result 中8 bytes + 1 bytes。
该argc是简单的int。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int …Run Code Online (Sandbox Code Playgroud)