【问题标题】:Python : terminology 'class' VS 'type'Python:术语“类”VS“类型”
【发布时间】:2011-05-08 22:25:56
【问题描述】:

只是一个简单的问题:什么时候应该使用术语“类”,什么时候应该在 Python 中使用术语“类型”?

  • “class”仅适用于用户定义的类型,“type”适用于内置类型?
  • 或者现在everything is a type ...即使对于用户定义的类,我是否应该始终使用“类型”?
  • ... ?

【问题讨论】:

    标签: python class types terminology


    【解决方案1】:

    它或多或少具有历史意义:they used to be different 很久以前,不再具有实际意义。

    编辑:我在提及具体实现时使用“class”,在谈到高级数据结构、应用程序架构等时,我以更非正式的方式使用“type”。在我的想法一个类型是一个更普遍的东西,我不认为每个类都是一个不同的类型。

    此外,当我使用元类(很少)时,我会提到类型。

    【讨论】:

    • 还有你自己,你什么时候使用其中一个?
    【解决方案2】:

    class 是一个 Python 数据结构,可以通过调用它作为该类实例的模板,例如foo = Foo().

    type 是一个类,可以通过继承的方式用作其他类的模板,例如class Foo(Bar):

    由于 Python 支持继承,所有类都可以用作附加类的模板,这意味着所有类实际上都是类型。

    自从派生自object 的“新型类”出现以来尤其如此,它将用户定义类的类型层次结构与内置类型统一起来。类一直是类型,但现在它们是与内置类型相同的类型

    虽然 Python 类是类型,但我仍然觉得这种区别很有用,所以这些术语在我看来并不完全是同义词。

    奖励定义:元类是一个类,其实例是类。在 Python 中,这些必须派生自 type 类,就像新式对象派生自 object.

    【讨论】:

      【解决方案3】:

      我使用“类型”来指代一般情况,但当我谈到属性时,我会切换到“类”。

      但你选择哪个并不重要。

      {} 的类型为 dictdict 类的iteritems() 方法返回一个迭代器。

      【讨论】:

      • 好吧...我只是想知道这一点,因为奇怪的是 1 事物会有 2 个名称...尤其是对于像 Python 这样非常简洁的语言!
      • 等到你点击“constructor”与“initializer”。
      • "constructor" vs. "initializer" 一点也不令人困惑。 __new__ 是构造函数,__init__ 是初始化器。
      • @aaronsterling:不,不是这样。
      【解决方案4】:

      这可能不会直接回答您的问题,但它可能会让您了解类型和类之间的区别。

      class Card:
         def __init__(self, suit=0, rank=0):
            self.suit = suit
            self.rank = rank
      card1 = Card()
      

      Card是一个类对象,所以它的类型是type

      但是,card1Card 的一个实例,所以它的类型是Card

      【讨论】:

      • 嗯……你也可以说“Card 是一个类型的实例”而不是“Card 是一个类对象”,我们回到正题!仍然不需要“类”这个词;)
      【解决方案5】:

      你可以说一个对象在运行时属于某个单一类型,但通过(多)继承,它可以被视为属于多个类。

      【讨论】:

      • 否,因为“通过多重继承”它也属于所有这些类型。你会选择它属于哪一种类型?类is 类型。
      • 我喜欢运行时方面;创建新类型时,它是一个类,而在创建具体类时,它是一个类型。
      【解决方案6】:

      在python代码中typeobject,但classkeyword,因此,根据上下文,这些词可以有不同的含义。对此有更深入了解的人似乎对此感到满意。

      type 对象用于提供与 class 关键字等效的功能。

      class Base(object):
          _about_base = 'An attribute of Base'
       
      class MyClass(Base):
          about_myclass = 'An attribute of myclass'
      
      that = MyClass
      
      this = type( 'MyClass', (Base,), dict( about_myclass='An attribute of myclass' ) )
      

      上述代码生成的thisthat是相同的,都是type类的实例。您也许可以说它们是type 类型的实例。 x = this()this 类/类型的实例。

      x = this()
      assert type(this) is type
      assert type(x) is this
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        相关资源
        最近更新 更多