好的,我有以下内容:
Class OwnableObject(MobileObject):
def __init__(self, name):
MobileObject.__init__(self, name)
self.owner = None # not owned
def is_ownable(self): return True
def is_owned(self): return self.owner
在OwnableObject上调用is_ownable方法有什么区别 并在MobileObject上调用is_ownable方法。
答案 0 :(得分:3)
更新:根据您现在发布的代码,无法在is_ownable
上致电MobileObject
,因为MobileObject
似乎没有is_ownable
的定义。
如果确实如此,则差异只是MobileObject
定义与OwnableObject
定义之间的差异。我已经更新了下面的条款来说明我的意思。
如果你用Python(或任何语言)创建一个类:
class MobileObject(object):
def __init__(self, position):
self.position = position
def move(self, position):
self.position = position
def is_ownable(self):
return False
然后创建一个子类:
class OwnableObject(MobileObject):
def __init__(self, position, owner=None):
MobileObject.__init__(self, position)
self.owner = owner
def is_ownable(self):
return True
def is_owned(self):
return self.owner
生成的子类自动继承其超类的方法:
movable = MobileObject()
movable.is_ownable() # returns False
movable.move(new_position) # moves movable
movable.is_owned() # causes an error
ownable = OwnableObject()
ownable.is_ownable() # returns True
ownable.move(new_position) # moves ownable
movable.is_owned() # returns owner or None
正如您所看到的,is_ownable()
和is_owned()
在这两个类之间有所不同 - 在后一种情况下,由于未定义is_owned()
,因此在movable
上调用时会导致错误{1}}。但是move()
在两个类中的工作方式相同。
答案 1 :(得分:1)
我认为这意味着same thing与任何支持object oriented paradigm的编程语言一样:
>>> class Base:
... def ok(self):
... print 'OK'
...
>>> class SubClass(Base):
... def oops(self):
... print 'Oops'
...
>>> x = SubClass()
>>> x.ok()
OK
>>>
答案 2 :(得分:1)
可以在子类上调用基类中实现的所有方法。除非重写子类中的方法,否则将使用基本实现。