如果用C语言编写python,为什么python语言中的所有东西都是对象?

时间:2017-05-24 14:03:22

标签: python c interpreter

据说:" python中的所有内容都是一个对象。"但是python是用C语言编写的,而C语言不是面向对象的编程语言。我知道C具有实现一些面向对象概念的能力,但它不应该被称为结构或某些东西而不是对象吗?

请为我澄清这个谜。谢谢。

2 个答案:

答案 0 :(得分:5)

首先,没有什么可以迫使用C编写的Python编译器在内部进行OO设计。假设编译器必须具有该功能,有点像说“为了将房子涂成红色,你必须使用带红色手柄的刷子”。工具的外观与借助该工具产生的结果之间没有关系。

同样地,没有什么能阻止你使用红色画笔将你的房子涂成蓝色。也就是说,没有什么能阻止你使用Python编译器来编写非OO程序。

出于同样的原因,第一批C ++编译器是用C语言编写的。

关于面向对象的主题,没有“面向对象的语言”这样的东西。面向对象是一种进行程序设计的方式,它与特定语言无关。

有些语言支持OO功能,而且有些语言缺乏此类支持。您的程序不会因为您在Python中编写它而自动转为OO。您的设计完全可能完全混乱。同样,很有可能用C语言编写OO程序。

与普遍看法相反,C实际上支持所有最重要的OO功能:

  • 自主对象只关心自己指定的任务,与外界的联系有限。这是OO中最重要的事情,完全独立于语言,因为它是100%的程序设计。
  • 私有封装。完成“opaque type”/“opaque pointers”。您可以使用这些实现完全私有/受保护的封装。通过class + private内置OO支持的语言不太方便,但很有可能。

    (另外,更粗略的是,“穷人私有”带有static文件范围变量,这可能是也可能不是可接受的进行私有封装的方法,具体取决于应用程序。)

  • 继承和多态。再次通过“opaque类型”结合函数指针。通过使用函数指针,您可以手动生成整个虚函数查找表,而不是让编译器为您修复此问题。同样,它不像其他语言那样漂亮,但可能。

C不支持的是各种其他方便的语言功能,例如构造函数/析构函数/ RAII,它们使OO编程变得更加容易。

答案 1 :(得分:0)

Python是一种语言 - 即语法和语法。因此,它不是用C语言编写的,也不是用任何其他编程语言编写的。

Python语言(实际上是任何语言)的实现可以用大多数其他图灵完备语言编写,C语言中有Python实现(参考文献也称为CPython),Java(名为Jython),一个用于.net运行时(不要问我实现了哪种语言 - 可能是C#但是......),以及在RPython中实现的Pypy,它本身就是Python的一个子集。

简而言之:一种语言与用于实现该语言的(可能是各种)技术无关。