【问题标题】:Invoking different methods in python在python中调用不同的方法
【发布时间】:2011-03-25 14:26:46
【问题描述】:

好的,我有以下内容:

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

【问题讨论】:

  • 我认为这是一个通用的编程问题,而不是特定于 Python 的。您应该阅读一些有关面向对象编程的文本中的类和继承。
  • 123,请参阅下面我编辑的答案。由于这里似乎没有为MobileObject 定义is_ownable,因此您不能这样做:mo = MobileObject(); mo.is_ownable()。结果将是一个错误。我的回答显示了如何做你所描述的。

标签: python inheritance subclass


【解决方案1】:

更新:根据您现在发布的代码,不可能在MobileObject 上调用is_ownable,因为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 时会导致错误。但是move() 在两个类中的工作方式相同。

【讨论】:

  • 在评论框中发布多行代码并没有真正起作用,所以我不太清楚你在问什么。你能编辑你原来的问题吗?
  • @Python123:如果您有更多要添加的内容,请编辑您的问题。没有换行符和空格的未格式化 Python 代码可以改变一切。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我想这意味着 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
    >>> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2020-03-05
      • 1970-01-01
      相关资源
      最近更新 更多