2017-04-09 86 views
1

的事情的基本性質如下:的Python創建對象

  1. 構造應在1個參數,東西的名稱。

石=事情( '石')

  • 所有者:存儲該物件的擁有人對象,通常Person對象的屬性。
  • 在OOP中,我們在初始化時將此屬性設置爲None,此時Thing不屬於任何Person(表示沒有對象值)。

    石頭。所有者

  • is_owned():返回一個布爾值,True如果事是「擁有」,否則爲假。
  • 石頭。 is_owned()

    4.get_owner():返回誰擁有Thing對象Person對象。

    石頭。 get_owner()

    實現類的東西,使得其滿足上述屬性和方法。

    林不知道什麼是錯我的代碼:

    class Thing: 
    def __init__(self,name): 
        self.name=name 
        self.owner=None 
    
    def is_owned(self): 
        return self.owner!=None 
    def get_owner(self): 
        return self.owner 
    

    我的問題: 作爲問題的狀態,當我輸入stone.owner,我期望得到的輸出無。然而,根本沒有產出。 編輯:沒有收到的輸出被接受而不是無。但是,有沒有辦法從stone.owner返回None?

    +0

    我不知道,但是,你想方法'但是你在你的代碼'is_owner'有is_owned'。請告訴你什麼是錯誤的,你得到了什麼輸出,以及你想得到什麼輸出。 – jedruniu

    +0

    你錯過了自己的方法,並記住縮進。 – JkShaw

    回答

    1
    1. 當你編寫python代碼時,你需要關心縮進。
    2. 一個班級內的每個功能都需要self作爲參數。

    所以,你的代碼必須是:

    class Thing: 
        def __init__(self,name): 
         self.name=name 
         self.owner="None" 
    
        def is_owned(self): 
         return self.owner!="None" 
        def get_owner(self): 
         return self.owner 
    
    +1

    有點迂腐,但 - 「自我」作爲一個參數只是一個慣例,它可以被稱爲任何東西。實例方法接收'instance'作爲第一個參數(通常稱爲'self'),'classmethods'接收'class'作爲第一個參數(通常稱爲'cls'),'staticmethods'不接收任何內容。 – AChampion

    +0

    謝謝@AChampion!我不知道! –

    1

    什麼原因打印是最有可能的是,Python的REPL不打印None值。
    由於None是Python中的單數值,因此問題中的當前代碼優於接受的答案(縮進除外),而"None"是普通字符串(它既不等於None也不等於False值,兩者都是其中None爲真)。

    2

    這是一個使用getter屬性的答案。

    class Thing(object): 
    
            def __init__(self, name): 
    
                self.name = name 
    
                self.owner = None 
    
                
    
            @property 
    
            def isOwned(self): 
    
                return self.owner is not None 
    
        
    
        thing = Thing('stone') 
    
        
    
        print("owner:", thing.owner) 
    
        print("isOwned:", thing.isOwned) 
    
      
    
        print("Setting owner.")    
    
        thing.owner = "Silver" 
    
        print("owner:", thing.owner) 
    
        print("isOwned:", thing.isOwned) 
    

    輸出是這樣的:

    $ python3 ./thingclass.py 
    
    owner: None 
    
    isOwned: False 
    
    Setting owner. 
    
    owner: Silver 
    
    isOwned: True