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

时间:2013-04-16 18:04:37

标签: python class constructor

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

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

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

打印当前列表的长度。

3 个答案:

答案 0 :(得分:3)

注意传递给每个实例方法的self参数。这是实例本身。它就像C ++或Java中的this,只是显式传递。你应该明确地使用它(如有疑问,请输入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 

答案 1 :(得分:2)

你需要使用self attribue,根据python代码样式"Always use self for the first argument to instance methods.",试试这个:

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

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

答案 2 :(得分: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 ,元音,辅音`,您可以为其命名。您将需要在构造函数中设置它们,然后您可以在类方法中更改或访问它们。

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

  1. 为什么要调用方法__length__?或许更具描述性(并且不那么滥用那些下划线)的东西可能有助于例如def print_number_of_vowels(self)
  2. 名称Data非常模糊,考虑使其更具体,例如AlphabetData
  3. 也许更像是:

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