2015-11-03 84 views
2

我要定义一个方法的属性:OOP属性定义

class variables: 
    def definition(self): 
     self.word = "apple" 

然后我想使用已定义的属性:

test = variables() 
print test.definition.word 

而不是写'apple'我得到一个错误:

Traceback (most recent call last): 
    File "bezejmenný.py", line 6, in <module> 
    print test.definition.word 
AttributeError: 'function' object has no attribute 'word' 
+0

应是**两条独立的行** - 调用方法('test.definition()')*然后*访问它创建的属性('print test.word')。你应该真的遵循结构化的Python OOP教程,这是非常基本的东西。你也不符合[风格指南](http://www.python.org/dev/peps/pep-0008/),在'__init__'之外创建一个新的属性是一种糟糕的形式。 – jonrsharpe

回答

3
  1. definition is am

    • 它是:ethod所以你需要执行它
    • 因为您要指派给自变量,就可以按如下

      test = variables() 
      test.definition() 
      print test.word 
      

一些想法通过您的实例访问最佳做法以大写字母开头名字

  • 如果您只希望您的班级拥有一个字段,则不需要您的definition方法
  • 扩展您的类object因为一切在巨蟒的对象(只蟒蛇2.x的)

    class Variables(object): 
        def __init__(self): 
         self.word = 'I am a word' 
    
    variables = Variables() 
    print variables.word 
    
  • +0

    现在'word'是一个* class属性*,它与*实例属性*有细微的差别。值得注意的是,'object'只在2.x中被需要,并且旧样式的类仍然是一个对象(它只是不是一个“对象” - 困惑了吗?) – jonrsharpe

    +0

    @jonrsharpe true :) –

    +0

    我写了定义方法因为我用它作为例子。最初我从事加载图像并保存它们的方法(而不是函数,经验教训)。 –

    2

    ,您可以访问实例属性是这样的:

    test = variable() 
    test.definition() 
    print test.word