Я уверен, что это будет отмечено как дубликат, но я действительно не понимаю, что я ищу. Я проверил документацию на python в дескрипторах, но я уже «две недели программировал» на Python, и я действительно не знаю, что я ищу!Дескрипторы Python __get__ и __set__
Это то, что я получил:
>>> class Blub(object):
... def __init__(self, value):
... print('Blub is ' + value)
... self.value = value
... def __get__(self):
... print('Blub gets ' + self.value)
... return self.value
... def __set__(self, value):
... print('Blub becomes ' + value)
... self.value = value
...
>>> class Quish(object):
... def __init__(self, value):
... self.blub = Blub(value)
... def __get__(self):
... return self.blub
... def __set__(self, value):
... self.blub = Blub(value)
...
Ниже то, что я хочу, чтобы это произошло, и не знаю, как это сделать:
>>> a = Quish('One')
Blub is One
>>> a.blub
Blub gets One
'One'
a.blub = 'Two'
Blub becomes Two
Что делать в Blub или Quish в чтобы это произошло. У меня есть очень простые классы здесь, но у меня есть гораздо более сложная версия, которая работает отлично, но только если я типа:
>>> a.blub.__get__()
Я думал, что точка этих дескрипторов было сделать ненужным фактически написать получить() и комплект(). Как заставить его вести себя так, как хотелось бы, или Python не может этого сделать?
Есть ли причина, по которой вы хотите написать свой собственный класс дескриптора для этого вместо использования 'property'? – BrenBarn
@BrenBarn: Я не знал о свойствах. Я все еще пытаюсь решить, что лучше (проще) использовать в этой ситуации. Я должен задать еще один вопрос относительно моего фактического монстра noob-класса, над которым я работал, чтобы понять это. Спасибо, что указали это. Больше чтения мне нужно сделать сейчас! – Sean
Свойства почти наверняка легче, чем писать собственный дескриптор. – BrenBarn