我在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
- 却没有?
答案 0 :(得分:1)
这不起作用,因为x
被视为构造函数类。这基本上意味着,为了使您的代码有效,x
已经被定义为class
。
使用object
创建类时,您使用的是空模板类来创建新类。使用int
或dict
时会发生类似的情况。新类继承了该类型的属性。
由于未定义类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
类。