You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用类内部嵌套类触发NameError: config未定义如何解决

报错原因&解决方案

核心报错原因

  • config是Preprocess类的内部嵌套类,全局作用域不存在直接叫config的变量,需要通过Preprocess.config访问该内部类
  • 传入的数据集名称Cora是字符串类型,缺少引号会被识别为未定义变量
  • 原类定义中__init__、get_data方法的缩进不匹配,会导致方法不属于Preprocess类,也会触发属性不存在的报错

修改后的完整代码

from torch_geometric.datasets import Planetoid
from torch_geometric.data import DataLoader
class Preprocess():
    class config():    
        root_dir = './data/'
        batch_size = 1
        hidden_dim = 16 
        dropout_rate = 0.5
        l2_reg = 5*10e-4
        learning_rate = 0.01
        epochs = 200
        loss_type = 'cross_entropy' # or nll_loss

    def __init__(self, config, d_name):
        self.root_dir = config.root_dir
        self.batch_size = config.batch_size
        
        self.cora = Planetoid(root='./data/cora', name='Cora')
        #self.citeseer = Planetoid(root='./data/citeseer', name='CiteSeer')
        #self.pubmed = Planetoid(root='./data/pubmed', name='PubMed')
        
        self.num_classes, self.num_node_features, self.data = self.get_data(d_name)
    
    def get_data(self, d_name):
        '''
            d_name = 'Cora', 'CiteSeer', 'PubMed'
        '''
        dataset = Planetoid(root=self.root_dir + d_name , name=d_name)
        return dataset.num_classes, dataset.num_node_features, DataLoader(dataset, batch_size = self.batch_size)

# 正确实例化方式
f = Preprocess(Preprocess.config, 'Cora')
# 可直接访问实例初始化时已经加载好的数据
print(f.num_classes, f.num_node_features)
# 如果需要单独调用get_data方法,写法如下
# res = f.get_data('Cora')

额外优化建议

如果默认就是用内部的config类,不需要额外传参的话,可以把__init__方法的config参数设置默认值,实例化的时候更方便:

# 修改__init__定义
def __init__(self, d_name, config=config):
    # 其余逻辑不变

# 实例化时只需要传数据集名称即可
f = Preprocess('Cora')

内容的提问来源于stack exchange,提问作者muhammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:09:01