Что желаю:
# main.py
import config
config.test = True
print(config.test) # True
print(config._test) # None
Что пробовал:
# config.py
_test = False
@property
def test():
return _test
@test.setter
def test(new_value):
global _test
_test = new_value
logger.info(f'config: test is set to {new_value}')
Было бы неплохо избежать использования обычного метода, такого как config.set_test(new_value). Спасибо
1 ответ
Сделайте это классом
class Config:
@property
def test(self):
return self._test
@test.setter
def test(self, value):
self._test = value
def __init__(self, **kwargs):
self._test = None
Однако в каком-то смысле это не имеет смысла, и причина в том, что у вас есть геттер И сеттер, поэтому на самом деле вы просто проходите долгий путь, чтобы установить переменную. Вы можете просто преобразовать self._test
в self.test
и удалить геттер/сеттер для тех же результатов.
В приведенной ниже версии есть только геттер, который подразумевает, что у вас есть переменная, которую вы хотите изменить внутренне, но публично «только для чтения».
class Config:
@property
def test(self):
return self._test
def __init__(self, **kwargs):
self._test = None
ИМО, иметь сеттер имеет смысл только в том случае, если кишки сеттера делают что-то нетривиальное. Например, если вы используете tkinter
и хотите преобразовать параметры в свойства, может иметь смысл иметь установщик, потому что то, что вы получаете и устанавливаете, на самом деле является вызовами TCL. Другими словами, это не просто псевдоним для приватной переменной.
Примере:
#mixin to convert root attributes and options to properties
class Root_mi:
@property
def alpha(self) -> float:
return self.tk.call('wm', 'attributes', self._w, '-alpha')
@alpha.setter
def alpha(self, f:float) -> None:
self.tk.call('wm', 'attributes', self._w, '-alpha', f)
@property
def alwaysontop(self) -> bool:
return self.tk.call('wm', 'attributes', self._w, '-topmost')
@alwaysontop.setter
def alwaysontop(self, b:bool) -> None:
self.tk.call('wm', 'attributes', self._w, '-topmost', b)
#more...
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.