【问题标题】:Python Object Oriented structurePython 面向对象的结构
【发布时间】:2014-07-07 18:05:46
【问题描述】:

我是 python 新手,我来自 C# 背景。我正在阅读一本关于 Python 的书,并遇到了一个声明,即类是 Python 中的一个对象。我不太确定这是否属实,因为我试图在网上查找它并找不到答案。谁能解释一下?

以下是作者所说的转述:

函数、模块和类等程序单元在 Python 中也是对象

有人还可以详细说明为什么会出现这种情况,因为 C# 对象是从类派生的。 就像 Car 是一个类别,Honda 一样,Mercedes 是该类别的对象。但正如我正在阅读的那样,它似乎在 Python 类中是一个对象。所以汽车是一个对象,本田和梅赛德斯也是一个对象,那么类有什么好处呢?

【问题讨论】:

  • 是的,这是真的。 Python 中的一切都是对象。我认为 Guido 并不特别关心 Java 和 C++ 是否以相同的方式做事。
  • 投票重新打开,因为这个问题足够清楚且可以回答。消除这种跨语言混淆可能对其他人有所帮助。
  • @StevenRumbalski 这是怎么回答的?在讨论实现时,是否有一个单一的、可选择的答案来回答“有什么好处”?似乎有很多正确的答案,在我看来它太宽泛了。
  • @Wooble 我知道 Guido 不在乎,但我的目的只是学术性的。与传统方法相比,这种方法的主要好处是什么。我不会离开它,因为没有类派生系统。我也喜欢 Python。

标签: python oop python-3.x


【解决方案1】:

在 Python 中创建类时:

class Frabbah:
    """
    A soothing class, designed to ease tensions on StackOverflow.
    """

然后一个人就有了可以使用的东西或对象:

--> print(Frabbah)
<class '__main__.Frabbah'>

并且可以为其添加属性:

--> Frabbah.answer = 'Interesting...'

然后查找它们:

--> print(Frabbah.answer)
Interesting...

Python 中的几乎所有东西都是事物或一等公民,这意味着您可以传递这些事物、检查它们、修改它们等等。所以整数作为对象,类是对象,函数就是对象……

【讨论】:

  • 谢谢。但是让我感到困惑的是,正如您对来自不同语言的人所理解的那样,当我有对象(超集)并且一切都来自它时,这意味着我不需要类(子集)我可以使用对象而不是该对象可以具有属性和功能。因为在这里你有对象而不是从该对象派生一个类而不是从该类派生对象。 ???
  • 我们也不需要循环,因为gotos 可以达到同样的目的。高级语言的存在是为了使某些事情变得更容易,而不是因为这个或那个构造是绝对必要的。至于object 及其实例——它们的特殊之处在于它们没有内置的dict,所以你不能向它们添加东西,你需要子类化。
  • 因此对象不能直接具有属性和功能,它们需要成为类的一部分才能充分利用类系统。对吗?
  • object 有一组默认方法,如果没有在子类中重写,则实际使用这些方法。但是不能添加方法和属性,也不能(我认为)改变现有方法/属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多