Calling a class function inside of __init__

前端 未结 6 1824
夕颜
夕颜 2020-12-02 06:13

I\'m writing some code that takes a filename, opens the file, and parses out some data. I\'d like to do this in a class. The following code works:

class MyCl         


        
相关标签:
6条回答
  • 2020-12-02 06:35

    If I'm not wrong, both functions are part of your class, you should use it like this:

    class MyClass():
        def __init__(self, filename):
            self.filename = filename 
    
            self.stat1 = None
            self.stat2 = None
            self.stat3 = None
            self.stat4 = None
            self.stat5 = None
            self.parse_file()
    
        def parse_file(self):
            #do some parsing
            self.stat1 = result_from_parse1
            self.stat2 = result_from_parse2
            self.stat3 = result_from_parse3
            self.stat4 = result_from_parse4
            self.stat5 = result_from_parse5
    

    replace your line:

    parse_file() 
    

    with:

    self.parse_file()
    
    0 讨论(0)
  • 2020-12-02 06:36

    You must declare parse_file like this; def parse_file(self). The "self" parameter is a hidden parameter in most languages, but not in python. You must add it to the definition of all that methods that belong to a class. Then you can call the function from any method inside the class using self.parse_file

    your final program is going to look like this:

    class MyClass():
      def __init__(self, filename):
          self.filename = filename 
    
          self.stat1 = None
          self.stat2 = None
          self.stat3 = None
          self.stat4 = None
          self.stat5 = None
          self.parse_file()
    
      def parse_file(self):
          #do some parsing
          self.stat1 = result_from_parse1
          self.stat2 = result_from_parse2
          self.stat3 = result_from_parse3
          self.stat4 = result_from_parse4
          self.stat5 = result_from_parse5
    
    0 讨论(0)
  • 2020-12-02 06:37

    Call the function in this way:

    self.parse_file()
    

    You also need to define your parse_file() function like this:

    def parse_file(self):
    

    The parse_file method has to be bound to an object upon calling it (because it's not a static method). This is done by calling the function on an instance of the object, in your case the instance is self.

    0 讨论(0)
  • 2020-12-02 06:48

    How about:

    class MyClass(object):
        def __init__(self, filename):
            self.filename = filename 
            self.stats = parse_file(filename)
    
    def parse_file(filename):
        #do some parsing
        return results_from_parse
    

    By the way, if you have variables named stat1, stat2, etc., the situation is begging for a tuple: stats = (...).

    So let parse_file return a tuple, and store the tuple in self.stats.

    Then, for example, you can access what used to be called stat3 with self.stats[2].

    0 讨论(0)
  • 2020-12-02 06:48

    I think that your problem is actually with not correctly indenting init function.It should be like this

    class MyClass():
         def __init__(self, filename):
              pass
    
         def parse_file():
              pass
    
    0 讨论(0)
  • 2020-12-02 06:50

    In parse_file, take the self argument (just like in __init__). If there's any other context you need then just pass it as additional arguments as usual.

    0 讨论(0)
提交回复
热议问题