0
나는 객체가 생성 될 때 해당 값을 포맷하기 위해서 사용되는 속성 이름과 기능의 사전을 가지고 :@ x.setter 데코레이터가없는 객체 속성에 setter 함수를 할당 할 수 있습니까?
class CoolClass(object):
def __init__(self, **given):
self.formatting_functions.update({
"date": self.str_to_date,
"price": self.str_to_price
})
for attribute_name in given:
if attribute_name in self.formatting_functions:
formatting_function = self.formatting_functions[attribute_name]
setattr(
self, attribute_name,
formatting_function(given[attribute_name])
)
else:
setattr(self, attribute_name, given[attribute_name])
을하지만 설정한다면이 "특별한"는 date
또는 price
후, 해당 포맷 함수처럼 속성 (물론) 실행되지 않습니다. date
및 price
을 @property
- 장식 자라고 str_to_date()
/str_to_price()
하고 각각 @date.setter
-/@price.setter
- 장식 자로 명시 적으로 작성하지 않고이 작업을 수행 할 수 있습니까?
[이] (http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Metaprogramming.html) 일부 관련이있을 수 있습니다에 : 난 그냥
setattr
을 덮어 솔루션을 구현 당신. –왜 '속성'없이이 작업을 수행하고 싶습니까? 설명자를 전혀 사용하지 않으시겠습니까? – jonrsharpe
@jonrsharpe 다른/더 많은 형식 지정 함수를 사용하는 유사한 클래스가 있는데, 이것은 문제를 설명하기위한 단순화 일뿐입니다. 나는'@ property'를 사용할 수 있었지만 많은 중복 코드를 생성 할 수있었습니다. 또한 클래스를 매우 유연하고 유연하게 유지하여 코드를 수정하지 않고도 새로운 특성과 서식 함수를 쉽게 추가 할 수 있습니다. – Kaleidophon