2017-04-09 85 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