这三个类似的Python类有什么区别?他们都做同样的事情(?)

时间:2015-05-30 00:52:55

标签: python class oop inheritance

所有这些类都在运行,它们的外向行为是相同的,但我不相信它们都是一样的(我的意思是除了它们的名字之外我无法区分)。不幸的是,我没有通过运行此代码获得任何错误 - 任何人都知道发生了什么?

- RandNum1 -

class RandNum1:
    a = 2

#do stuff

b=RandNum1()
b.a

c=RandNum1
c.a

- RandNum2 -

class RandNum2():
    a = 2

#do stuff

b=RandNum2()
b.a

c=RandNum2
c.a

- RandNum3 -

class RandNum3(object):
    a = 2

#do stuff

b=RandNum3()
b.a

c=RandNum3
c.a

2 个答案:

答案 0 :(得分:1)

第三个是“新风格”类,这是在现代Pythhon 2中进行类定义的正确方法(它不再是新的,但它就是所谓的)。在这个例子中,差异不明显,但如果你想做任何复杂的继承,属性描述符,内省或元类,你应该使用

class ClassName(object):
      pass

基类的形式和

class DerivedClassName(ClassName):
      pass

子类的表单。

有关详情,请参阅https://wiki.python.org/moin/NewClassVsClassicClass

答案 1 :(得分:0)

RandNum1RandNum2是完全相同的旧式类,没有新的对象功能。

另一方面,

RandNum3是一种新式的课程。一切都在这里工作。

在大多数情况下,你应该总是使用新式的类,除非你需要的东西非常简单。