在python中调用不同的方法

时间:2011-03-25 14:26:47

标签: python inheritance subclass

好的,我有以下内容:

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方法。

3 个答案:

答案 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)

可以在子类上调用基类中实现的所有方法。除非重写子类中的方法,否则将使用基本实现。