据说:" python中的所有内容都是一个对象。"但是python是用C语言编写的,而C语言不是面向对象的编程语言。我知道C具有实现一些面向对象概念的能力,但它不应该被称为结构或某些东西而不是对象吗?
请为我澄清这个谜。谢谢。
答案 0 :(得分:5)
首先,没有什么可以迫使用C编写的Python编译器在内部进行OO设计。假设编译器必须具有该功能,有点像说“为了将房子涂成红色,你必须使用带红色手柄的刷子”。工具的外观与借助该工具产生的结果之间没有关系。
同样地,没有什么能阻止你使用红色画笔将你的房子涂成蓝色。也就是说,没有什么能阻止你使用Python编译器来编写非OO程序。
出于同样的原因,第一批C ++编译器是用C语言编写的。
关于面向对象的主题,没有“面向对象的语言”这样的东西。面向对象是一种进行程序设计的方式,它与特定语言无关。
有些语言支持OO功能,而且有些语言缺乏此类支持。您的程序不会因为您在Python中编写它而自动转为OO。您的设计完全可能完全混乱。同样,很有可能用C语言编写OO程序。
与普遍看法相反,C实际上支持所有最重要的OO功能:
私有封装。完成“opaque type”/“opaque pointers”。您可以使用这些实现完全私有/受保护的封装。通过class
+ private
内置OO支持的语言不太方便,但很有可能。
(另外,更粗略的是,“穷人私有”带有static
文件范围变量,这可能是也可能不是可接受的进行私有封装的方法,具体取决于应用程序。)
C不支持的是各种其他方便的语言功能,例如构造函数/析构函数/ RAII,它们使OO编程变得更加容易。
答案 1 :(得分:0)
Python是一种语言 - 即语法和语法。因此,它不是用C语言编写的,也不是用任何其他编程语言编写的。
Python语言(实际上是任何语言)的实现可以用大多数其他图灵完备语言编写,C语言中有Python实现(参考文献也称为CPython),Java(名为Jython),一个用于.net运行时(不要问我实现了哪种语言 - 可能是C#但是......),以及在RPython中实现的Pypy,它本身就是Python的一个子集。
简而言之:一种语言与用于实现该语言的(可能是各种)技术无关。