不要在生产代码中使用反射!Python呢?

2024-05-15 00:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我写过C语言,而来自高层的咒语似乎是“永远不要在生产代码中使用反射”。我用它来测试代码,但从来没有在野外运行过。所有的论据似乎都是合理的,总有一种方法可以通过添加另一层抽象或设计模式或其他什么来实现。在

现在我开始写一些严肃的Python代码,我想知道是否同样的原则适用。python的设计似乎考虑了反射。模块和类将成员存储在易于访问的字典中。例如,Django模型的元类采用字符串来引用成员。在

我可以用Python编写C#/Java,但我真的不想。我仍然坚信“不反思”的说法。Python的方式只是根本不同吗?在


Tags: 模块django方法字符串代码模型字典设计模式
3条回答

作为一种动态语言,Python与静态类型语言有着本质上的不同,因此它的一切都是反射的:-)而且在生产代码中从不使用反射(对于静态语言)对我来说似乎有点极端。在

我认为c中的“在生产代码中无反射”是不正确的。
反射通常允许程序员做一些不可能的事情。
我会说“生产代码中不允许非公共成员进行反射”和“小心使用反射!”如果使用不当,您可能会失去性能。正确使用可以使您获得性能(只需考虑静态反射) 不要对大量调用的代码使用反射。
Python是一种动态语言。所有的概念都是不同的。正常的做法(和正确的方法)是使用你所说的技术。在

是的,在这方面,Python开发与之完全不同。在

C#/Java中的反射指的是运行时了解它正在运行的代码的信息,并根据这些信息做出决策的能力。在

由于Python使用动态类型,任何类型发现都委托给运行时,而不是编译时,因此基本上这意味着任何Python程序都必须使用反射才能工作,只是它不称为反射,它称为运行程序:)
此外,Python哲学包含执行的动态特性,因此您应该毫不犹豫地利用它来实现您的优势。在

注:虽然我们应该避免在紧循环中使用反射,并且应该意识到反射速度慢一到两个数量级,但是当它是工作的正确工具时,不应该害怕使用它。在

相关问题 更多 >

    热门问题