我不知道如何在类方法中访问类属性。当我在方法中使用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'
答案 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
,它会进入该类。因此,这个案例有一个空列表。