Я новичок в Python.Свойство Python с геттерами и сеттерами
Я хочу иметь класс под названием «Вербность». Он предназначен для управления объемом печатной продукции моей новой программы Python.
Многословие должно быть постоянным во время работы моей программы, поэтому я намеревался инициализировать объект Verbosity уровнем требуемой детализации. Позволяет вызвать экземпляр этого объекта «глагол».
Пока моя программа работает, я часто хочу проверить многословие, чтобы программа знала, когда печатать выходные данные или нет. Таким образом, я хочу вызвать verb.high, verb.low и т. Д. И вернуть true или false.
Вот некоторые примеры кода (на основании некоторого кода в некотором пакете я нашел), но он пока не работает в моей программе:
VERB_QUIET = 0
VERB_LOW = 1
VERB_MEDIUM = 2
VERB_HIGH = 3
VERB_DEBUG = 4
class Verbosity(object):
"""Class used to determine what to print to standard output.
Attributes:
level: Determines what level of output to print.
"""
value = "low"
def __init__(self, new_value="low"):
self.level = new_value
def __getattr__(self, name):
"""Determines whether a certain verbosity level is
less than or greater than the stored value.
Args:
name: The verbosity level at which the info/warning string
will be output.
"""
if name is "quiet":
return self.level >= VERB_QUIET
elif name is "low":
return self.level >= VERB_LOW
elif name is "medium":
return self.level >= VERB_MEDIUM
elif name is "high":
return self.level >= VERB_HIGH
elif name is "debug":
return self.level >= VERB_DEBUG
def __setattr__(self, name, value):
"""Sets the verbosity level
Args:
name: The name of what to set. Should always be 'level'.
value: The value to set the verbosity to.
Raises:
ValueError: Raised if either the name or the level is not
a valid option.
"""
if name == "level":
if value == "quiet":
level = VERB_QUIET
elif value == "low":
level = VERB_LOW
elif value == "medium":
level = VERB_MEDIUM
elif value == "high":
level = VERB_HIGH
elif value == "debug":
level = VERB_DEBUG
else:
raise ValueError("Invalid verbosity level " + str(value) + " specified.")
super(Verbosity, self).__setattr__("level", level)
Если у вас есть лучший подход, я бы рад слышать что. Тем не менее мне также будет интересно узнать, как работать над этим подходом.
* «он еще не работает» * * Вы могли бы расширить то, что это означает *, точно ? Дайте [mcve]. Обратите внимание, что вам не следует сравнивать строки по * identity * ('x is y'), но * равенство * (' x == y'). – jonrsharpe
Используйте модуль 'logger'. – Daniel
Вы можете написать пользовательский дескриптор (https://docs.python.org/3/howto/descriptor.html), чтобы сократить шаблонный шаблон, но использование проверенных стандартных функций библиотеки, вероятно, является лучшей идеей , – jonrsharpe