如何使用__init__方法设置类属性?

时间:2016-01-02 11:47:54

标签: python class oop

我不知道如何在类方法中访问类属性。当我在方法中使用self.something分配变量时,它不会访问类属性。

class Dictionary(object):

    words = []

    def __init(self):
        self.words_file = open('words.txt')
        self.words = [x.strip('\n') for x in words_text.readlines()]
        words_file.close()

    def print_list(self):
        print self.words

d = Dictionary()
d.print_list()

我得到的是[]

我在第一次尝试不使用words = [],然后它会出现以下错误:

AttributeError: 'Dictionary' object has no attribute 'words'

2 个答案:

答案 0 :(得分:1)

方法名称应为__init__,最后有两个下划线,而不是__init

def __init__(self): #here!
   self.words_file = open('words.txt')
   self.words = [x.strip('\n') for x in words_text.readlines()]
   words_file.close()

答案 1 :(得分:1)

这似乎更接近你的意图:

class Dictionary(object):

    def __init__(self):
        with open('words.txt') as words_file:
            self.words = [x.strip('\n') for x in words_file]

    def print_list(self):
        print self.words

d = Dictionary()
d.print_list()

您需要特别注意特殊方法的命名。他们总是必须以两个下划线开始和结束。所以,它必须是__init__。如果您使用其他名称,Python将使用__init__()的默认object。当然,这不会将words设置为实例属性。

此:

class Dictionary(object):

    words = []

创建一个新的类属性。它在所有实例之间共享。访问words上的self

self.words

首先查看实例。如果它在那里找不到属性word,它会进入该类。因此,这个案例有一个空列表。