在Python OOP中声明全局变量和跨方法传递值

时间:2018-08-15 03:43:16

标签: python oop

声明全局变量和方法之间的传递值 在Python OOP中。

因此,我想将nethod1的结果传递给 方法2。

例如

import pandas as pd

class ExampleClass(object):

 def method1(self):
  file_path="/some/path/"
  file_data="populaion_data.csv"

  data=pd.read_csv(file_path+file_data)
  res = data.head(5)  


 def method2(self):
  """
  In his method, i would like to do the following tasks
  (1)read the "res" from the method1.
  (2)want to get the value of "file_path" from method1 again. 
  """

而且,我认为最好声明 “ file_path”值作为全局变量,因此我可以使用它 几种方法的价值。

3 个答案:

答案 0 :(得分:1)

如果您希望变量可以在同一类的各个方法之间访问,则只需声明一个实例变量:

    import pandas as pd

    class ExampleClass(object):
        def __init__(self):
            self.file_path = "/some/path/" 
            self.res = ''

        def method1(self):
            file_data="populaion_data.csv"
            data=pd.read_csv(self.file_path+file_data)
            self.res = data.head(5)  


        def method2(self):
            """
            In his method, i would like to do the following tasks
            (1)read the "res" from the method1.
            (2)want to get the value of "file_path" from method1 again. 
            """
            #self.file_path and self.res will be accessible here too.
            print (self.file_path, self.res)

    a = ExampleClass()
    a.method2()

答案 1 :(得分:0)

您可以执行以下操作:

def method1(self):
    self.file_path = "some/path/"
    file_data = "population_data.csv"
    data=pd.read_csv(file_path+file_data)
    self.res = data.head(5)  

def method2(self):
    print(self.file_path, self.res)

请注意,但是必须在method1之后调用method2。您还可以从method1调用method2,然后使用如下值:

def method1(self):
    file_path = "some/path/"
    file_data = "population_data.csv"
    data=pd.read_csv(file_path+file_data)
    res = data.head(5)  
    return (file_path, res)

def method2(self):
    file_path, res = self.method1()

您也可以将其定义为类变量或静态变量。 要将其定义为静态变量,只需执行以下操作:

class ExampleClass:
    file_path = "some/path"
    data=pd.read_csv(file_path+file_data)
    res = data.head(5)

    def method2(self):
        print(self.file_path, self.res)

答案 2 :(得分:0)

这不是OOP问题。使用OOP,您可以操纵定义的对象,从基本的角度来看,这些对象是 types 一个 type 具有 state (数据)和行为(称为方法的集成函数)的组件。因此,在OOP中没有全局变量。可以通过方法参数将数据提供给对象,并且处理结果应该由方法返回。

在此cas中,除非您需要前面答案中定义的对象,否则我看不到这些函数位于类内的原因。根据您的代码示例,这可以通过将数据作为参数传递的函数来解决:

import pandas as pd
DEFAULT_FILE_PATH ="/some/path/"

def method1(filename, file_path='/'):
    data=pd.read_csv(file_path + file_data)
    return data.head(5)  


def method2(data, file_path='/'):
"""
In his method, i would like to do the following tasks
(1)read the "res" from the method1.
(2)want to get the value of "file_path" from method1 again. 
"""

所以您知道file_path是什么,您可以将其用作

method2(method1("populaion_data.csv", DEFAULT_FILE_PATH), DEFAULT_FILE_PATH)