面向对象的python

时间:2015-07-09 22:08:30

标签: python

我在python中有一个简单的类示例:

class song:
    def __init__(self, x):
        print x

bang=song(['Our whole universe was in a hot dense state,Then nearly fourteen billion years ago expansion started, wait...'])

这很有效。 但是在另一本书中,创建一个新类时会使用“对象”这个词:

class song(object):
    def __init__(self,x):
        print x

bang=song(['Our whole universe was in a hot dense state,Then nearly fourteen billion years ago expansion started, wait...'])

这也有效。另外,如果用例如x:

替换了对象
class song(x):
    def __init__(self,x):
        print x

smile=song(['Our whole universe was in a hot dense state,Then nearly fourteen billion years ago expansion started, wait...'])

它不起作用(NameError: name x is not defined)。 关于object有什么特别之处,据我所知它甚至不是一个保守的词,不是吗?为什么带有它的代码有效,而x - 却没有?

3 个答案:

答案 0 :(得分:1)

这不起作用,因为x被视为构造函数类。这基本上意味着,为了使您的代码有效,x已经被定义为class

使用object创建类时,您使用的是空模板类来创建新类。使用intdict时会发生类似的情况。新类继承了该类型的属性。

由于未定义类x,因此新类不能使用x作为构造函数。因此,返回该错误。

答案 1 :(得分:0)

因为object是您继承的基础对象。 x不作为对象存在,因此无法从

继承

你可以这样做:

class x(object):
    def __init__(self, item)
        self.item = item


class song(x):
    def print(self):
         print(self.item)


bang=song(['a bunch of text']) #why is this a list?

bang.print()

而且你有inheritance - 这么多x让这个让人困惑

答案 2 :(得分:0)

首先,您应该熟悉inheritance

如其他答案中所示,如果x本身就是一个类,则可以声明class song(x):。通过这样做,song类将继承基类x。

中的方法

现在,类声明从对象继承的原因可以追溯到python2.2。这些类声明称为:New style classes

它们具有与经典对象不同的对象模型,并具有经典对象中不存在的一组属性和功能。一些例子是@property关键字,super()方法。关于它们之间差异的更多细节可以在here找到,但它也在Stack Overflow上广泛讨论:here

建议使用这些new style classes,以便让您的基类继承自object类。