簡體   English   中英

在python類中使用configparser,好還是壞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM