如果类指定了元类,从 ABC 继承的正确方法是什么?
直接的尝试
class KindMeta(type):
...
class Kind(ABC, metaclass=KindMeta):
...
Run Code Online (Sandbox Code Playgroud)
导致TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
在 KindMeta 中继承 ABCMeta 似乎有点错误,因为这mcs
也用于创建非抽象类。
创建从 KindMeta 继承的自定义 ABC 听起来也不错。
有没有更好的处理方法?或者哪个解决方案更Pythonic并且应该是首选?
我在理解增加指针的两种方式的差异时遇到了一个问题:
int **a;
a++; //works fine
**a++; //same here
a += n; //still good
**a += n; //is not the same and I can't figure out what is going on
Run Code Online (Sandbox Code Playgroud)
我试图在这里以相反的顺序打印程序的参数
int main(int argc, char **argv)
{
argv += argc; //works fine until it is changed to
// **argv += argc
while (--argc > 0)
{
argv--;
(*argv)--;
while (*(*argv)++)
ft_putchar(**argv);
if (argc - 1 > 0)
ft_putchar('\n');
}
return (1);
}
Run Code Online (Sandbox Code Playgroud)
总结问题 - 为什么第二种方式不一样?
例如,如果我尝试将三个字符串与+
运算符:串联在一起,s = "s1" + "s2" + "s3"
python如何处理它?
它会计算len1,len2,然后为大小为len1 + len2的新字符串分配内存,并重复执行直到+
处理完所有运算符?
还是它可以计算所有操作数的长度并只执行一次分配?在这种情况下,可以安全地假设
s = "s1" + "s2" + "s3"
Run Code Online (Sandbox Code Playgroud)
执行速度比
s = "s1" + "s2"
s += "s3"
Run Code Online (Sandbox Code Playgroud)
或者,也许根本没有分配,只是某种程度上记住了操作数的内存地址及其顺序?
感谢有关python优化主题的文章建议。