2011-03-25 107 views
1

好了,所以我有以下幾點:調用在python不同的方法

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方法之間的差異。

+1

我記得這是一個普通的編程問題,而不是Python特有的。你應該閱讀一些關於面向對象編程的文章中的類和繼承。 – Genba 2011-03-25 14:31:26

+0

123,見下面我編輯的答案。由於在這裏沒有爲'MobileObject'定義'is_ownable',所以你不能這樣做:'mo = MobileObject(); mo.is_ownable()'。結果將是一個錯誤。我的回答顯示瞭如何做你正在描述的內容。 – senderle 2011-03-25 15:20:12

回答

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 
>>> 
3

更新:根據你現在已經發布的代碼,這是不可能的呼籲is_ownableMobileObject因爲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()在兩個類中的作用是相同的。

+1

在評論框中發佈多行代碼實際上並不奏效,所以我無法完全知道你在問什麼。你能編輯你原來的問題嗎? – senderle 2011-03-25 14:46:04

+0

@ Python123:如果你有更多的添加,請編輯你的問題。未格式化的Python代碼沒有換行符和間隔符可以改變一切。 – unholysampler 2011-03-25 14:47:31

1

所有在基類中實現的方法都可以在子類上調用。除非您重寫子類中的方法,否則將使用基本實現。