pythonstaticmethod调用外部变量_python:具有staticmethods的类vs具有全局变量的模块

我正在研究这个Python模块,它由几个文件组成 . 这些文件实际上很少是独立的,并且意味着要做一个非常具体的工作 . 我知道这样一个事实:这些文件只有一个实例(模块?),而且不多,因为这种工作是顺序的,只需要一次 .

让我们以我正在构建的这个 CXXParser 模块为例:

该例程简单明了 - 获取一个c文件,解析它,然后将其转换为其他内容 . 由于我来自c世界,我立即开始在Python中寻找静态方法和单例 . 对于这个例子的使用,我有'public' parse 函数和这个模块的许多'inner'函数,它实际上解析了文件 .

我想知道,'Pythonic'这样做的方法是什么?我开始四处寻找正确的方法,但只是感到困惑 . 因为我想到了单身 - 我看到this question,从阅读答案开始我就在模块级实现了它 . 但是,再一次,我观看了Python核心开发人员Raymond Hettinger的视频,并且他提到了几次 global variables are bad ,并且最好使用类级变量 .

这些是我目前面临的两个选择:

A. Use a class with classmethods:

#cxxparser.py

class CXXParser(object):

filename = ''

cflags = ''

translation_unit = None

def __init__(self, filename, cflags = None):

super(CXXParser, self).__init__()

filename = filename

if cflags:

cflags = cflags

@classmethod

def get_tu(cls):

'get the tu from the file'

return tu

@classmethod

def parse(cls):

...

#call some inner functions

#for example:

translation_unit = cls.get_tu()

并从另一个模块使用:

from cxxparser import CXXParser

cxxparser = CXXParser('Foo.c')

cxxparser.parse()

B. Use module-level functions, with globals:

#cxxparser.py

translation_unit = None

filename = ''

def get_tu(file):

'get the tu from the file'

return tu

def parse(filename='', cflags = None):

global translation_unit

global filename

filename = filename

if cflags:

cflags = cflags

...

#call some other functions

translation_unit = get_tu(filename)

并从另一个模块使用:

import cxxparser

cxxparser.parse('Foo.C')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值