8
A
回答
11
如果您定义了一个类并且不声明任何特定的父类,则该类将成为“经典类”,其行为与“从对象继承的”新类“的行为有点不同。在这里看到更多的细节:http://docs.python.org/release/2.5.2/ref/node33.html
经典类没有共同的根,所以基本上,你的AClass不从任何类继承。
请注意,这是特定于3.0版之前的Python版本。在Python 3中,如果没有声明其他父类,则所有类都是新类,并从对象隐式地继承。
2
在Python 2.x或更旧版本中,您的示例AClass
是“旧式”类。
“新风格”类具有已定义的继承,并且必须从对象或其他类继承。
What is the difference between old style and new style classes in Python?
编辑:哇,我不认为这是可以使用在Python 3.x的旧样式语法但我只是试了一下,而且语法仍然有效。但你得到一个新式的课程。
2
让我们试试吧。
>>> class AClass:
... pass
...
>>> AClass.__bases__, type(AClass)
((), <type 'classobj'>) # inherits from nothing
>>> class AClass(object): # new style inherits from object
... pass
...
>>> AClass.__bases__, type(AClass)
((<type 'object'>,), <type 'type'>)
阅读其他答案中给出的链接中的新样式类的介绍。
8
试试下面的代码片段在Python 2.7和Python 3.1
class AClass:
__slots__ = ['a', 'b', 'c']
print(type(AClass))
print(issubclass(AClass,object))
print(isinstance(AClass,type))
在Python 2.7,你会得到:
<type 'classobj'>
False
False
和Python 3.1,你会得到。
<class type>
True
True
这就解释了一切。这是Python 2中的旧式类,除非您从object
中继承它。只有在Python3中,默认情况下它将被视为新的样式类。
相关问题
- 1. C#中的默认继承类型
- 2. 具有默认参数的类继承
- 3. 的Java 8默认方法继承
- 4. 的Python:变量,继承和默认参数
- 5. Python副本:如何继承默认的复制行为?
- 6. SVG内联 - 默认或继承高度
- 7. PHP - 继承功能默认值
- 8. C++继承功能默认操作
- 9. 从默认样式继承样式
- 10. 没有默认构造函数 - 继承
- 11. .Net继承控件属性默认值
- 12. 骨干类模型不继承默认
- 13. Python的继承
- 14. Python的 - 继承
- 15. 不承认C++继承
- 16. Python忽略提供给继承类中的元组的参数的默认值
- 17. Python类继承
- 18. Python:类继承
- 19. Python中的继承
- 20. 为继承的类的默认构造方法
- 21. Django的模型类的继承 - 默认领域和覆盖
- 22. 从类继承的类没有默认的构造函数
- 23. 使用PowerShell替换具有继承默认值的ACL
- 24. 默认的构造函数和虚拟继承
- 25. Linux上pthread互斥体的默认优先级继承策略?
- 26. C++的默认继承访问说明符?
- 27. Firefox扩展来显示浏览器默认的继承?
- 28. 上继承.NET控件更改属性的默认值
- 29. 在.NET C#中:继承控件Texbox,并更改默认的BackColor
- 30. 继承子类时的默认保护级别是什么?
关于`object`和旧vs新类的所有答案都是正确的,但你为什么要问?是否有实际的理由,还是仅仅是一个哲学/语言设计问题? (因为在大多数情况下,没关系!) – 2011-02-05 10:16:17