[英]using configparser in python class, good or bad?
在類方法中使用ConfigParser是不好的做法嗎? 這樣做將意味着該類隨后被綁定到配置上,而不是那么容易重用,但是意味着方法中的輸入參數更少,尤其是在參數必須向下傳遞多層的情況下,我會感到混亂。
是否有很好的選擇(除了僅將配置值作為方法參數傳遞外)? 還是人們發現的特定模式對此很有效?
例如
# get shared config parser configured by main script
from utils.config_utils import config_parser
class FooClass(object):
def foo_method(self):
self._foo_bar_method()
def _foo_bar_method(self):
some_property = config_parser.get("root", "FooProperty")
....
如果您在單個類中需要大量參數,這可能是您試圖對該類進行過多處理的症狀(請參見SRP )
如果確實確實需要一些配置選項,而這些配置選項太多了,無法提供一個簡單的類作為參數,我建議將配置抽象為一個單獨的類,並將其用作參數:
class Configuration(object):
def __init__(self, config_parser):
self.optionA = config_parser.get("root", "AProperty")
self.optionB = config_parser.get("root", "BProperty")
self.optionX = config_parser.get("root", "XProperty")
@property
def optionY(self):
return self.optionX == 'something' and self.optionA > 10
class FooClass(object):
def __init__(self, config):
self._config = config
def _foo_bar_method(self):
some_property = self._config.optionY
....
config = Configuration(config_parser)
foo = FooClass(config)
通過這種方式,您可以重用您的配置抽象,甚至可以從同一配置解析器出於不同目的構建不同的配置抽象。
您甚至可以改進配置類,使其具有更具聲明性的方式來將配置屬性映射到實例屬性(但這是更高級的主題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.