更新:根據你現在已經發布的代碼,這是不可能的呼籲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
上調用時會導致錯誤。但move()
在兩個類中的作用是相同的。
我記得這是一個普通的編程問題,而不是Python特有的。你應該閱讀一些關於面向對象編程的文章中的類和繼承。 – Genba 2011-03-25 14:31:26
123,見下面我編輯的答案。由於在這裏沒有爲'MobileObject'定義'is_ownable',所以你不能這樣做:'mo = MobileObject(); mo.is_ownable()'。結果將是一個錯誤。我的回答顯示瞭如何做你正在描述的內容。 – senderle 2011-03-25 15:20:12