L_yj 发表于 2019-10-21 18:35

求助,python关于类及文件引用问题请教。

本帖最后由 L_yj 于 2019-10-21 13:39 编辑

当前创建有一个文件夹中包含两个文件:
operation
--data_config.py
--get_data.py

代码如下:
data_config.py

# coding:utf-8

class global_var:
    # data = '0'
    def __init__(self):
      self.data = '0'

    def get_case_data(self):
      return global_var.data



get_data.py
# coding:utf-8

from operation_data import data_config
# import data_config
# from . import data_config


class Getdata:

    def get_request_data(self):
      col = int(data_config.get_case_data())
      return col


if __name__ == '__main__':
    gd = Getdata()
    print(gd.get_request_data())



问题:
运行get_data.py
当前代码运行后有报错


从网上找到几种方案,尝试后均没有正常运行代码。
还请大神们看一下原因,求说明一下。

bluerabbit 发表于 2019-10-21 19:18

data_config.py
class global_var:
    def __init__(self):
      self.data = '0'
    def get_case_data(self):
      return self.data

get_data.py
from operation_data import data_config

class Getdata:
    def get_request_data(self):
      col = int(data_config.global_var().get_case_data())
      return col

if __name__ == '__main__':
    gd = Getdata()
    print(gd.get_request_data())

L_yj 发表于 2019-10-22 10:09

bluerabbit 发表于 2019-10-21 14:18
data_config.py
class global_var:
    def __init__(self):


有效果,不过需要把data_config 中__init__删掉,直接写成data=‘0’

不知道为什么不能直接 import data_config

能解答一下吗?

井右寺 发表于 2019-10-22 10:24

我记得 同目录是 可以直接引用的呀
from data_config import global_var
以包来引用的话,包目录下得有__init__.py文件
from . import data_config

bluerabbit 发表于 2019-10-23 10:00

L_yj 发表于 2019-10-22 10:09
有效果,不过需要把data_config 中__init__删掉,直接写成data=‘0’

不知道为什么不能直接 import da ...

data_config.py 下面这两种写法都可以返回 data 值,如果你的 return 语句是 return global_var.data,相当于是返回类属性,那 data 定义就不能在 __init__() 里,必须直接在类体下。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#1
class global_var:
    def __init__(self):
      self.data = '0'
    def get_case_data(self):
      return self.data

#2
class global_var:
    data = '0'
    def get_case_data(self):
      return global_var.data


get_data.py 直接 import data_config 可以的。之前你的 code 里 col = int(data_config.get_case_data()),意味着 get_case_data 是 data_config 的一个成员,而实际上它只是 data_config.global_var 下的成员,所以会出错。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#from operation_data import data_config
import data_config

class Getdata:
    def get_request_data(self):
      col = int(data_config.global_var().get_case_data())
      return col

if __name__ == '__main__':
    gd = Getdata()
    print(gd.get_request_data())

bluerabbit 发表于 2019-10-23 10:01

井右寺 发表于 2019-10-22 10:24
我记得 同目录是 可以直接引用的呀
from data_config import global_var
以包来引用的话,包目录下得有__ ...

Python 3.x 下,包目录下的 __init__.py 文件不是必须的,Python 2.x 才是必须
页: [1]
查看完整版本: 求助,python关于类及文件引用问题请教。