0

如何从 python 中的类构造函数访问列表以在另一个类方法中使用?例如:

Class Data():
    def __init__(self):
        list1 = ["a", "e", "i", "o", "u"]

    def __length__():
        length = len(list1)
        print(length)

打印当前列表的长度。

4

3 回答 3

3

注意self传递给每个实例方法的参数。它是实例本身。就像this在 C++ 或 Java 中一样,只是显式传递。你应该明确地使用它(import this如果有疑问,请输入)。

所以,正如其他海报提到的,你需要这样的东西:

class Data():
  def __init__(self):
    self.vowels = ['a', 'e', 'u', 'i', 'o']

  def __len__(self): # if you want to use len() on your object
    return len(self.vowels) # refer to the list defined in constructor 
于 2013-04-16T18:11:18.223 回答
2

您需要使用 self 属性,根据 python 代码样式“始终使用 self 作为实例方法的第一个参数”。, 尝试这个 :

class Data():
    def __init__(self):
        self.list1 = ["a", "e", "i", "o", "u"]

    def __length__(self):
        length = len(self.list1)
        print(length)
于 2013-04-16T18:07:14.487 回答
1

要解决您的问题,您应该使用实例属性:

class Data():
    def __init__(self):
        self.list1 = ["a", "e", "i", "o", "u"]

    def __length__(self):
        length = len(self.list1)
        print length

这里的想法不是您正在“访问构造函数”,而是您正在访问此类实例的属性。该类Data可能具有以下属性:list1“list2 ,vowels ,consonants”,您可以命名它。您需要在构造函数中设置这些,然后您可以在类方法中更改或访问它们。

但也许你可以做得更好。考虑以下两个想法:

  1. 你为什么要调用你的方法__length__?也许更具描述性的东西(并且较少滥用这些下划线)会有所帮助,例如def print_number_of_vowels(self).
  2. 这个名字Data很模糊,考虑让它更具体,例如AlphabetData

也许更像是:

class AlphabetData():
    def __init__(self):
        self.vowels = ["a", "e", "i", "o", "u"]

    def print_number_of_vowels(self):
        print len(self.vowels)
于 2013-04-16T18:06:50.880 回答