Я пытаюсь получить поведение, в котором метод экземпляра детского класса запускается в качестве ответа на атрибут экземпляра родителя, обновляется. Дочерний класс может наследовать от родителей, если это единственный способ сделать это. Мне известно о наблюдателях/обратных вызовах, а затем запускаю функции обратного вызова после обновления, но я хочу, чтобы нормализовать можно было вызвать без явного кодирования. />
Атрибуты экземпляра в приведенном ниже коде не могут быть атрибутами класса < /li>
Нельзя явно вызовать normalized.normalise () < /code> in raw.update_values () < /code>, как показано в последних 2 примерах. Методы из разных классов, ограниченных атрибутом экземпляра, RAW.X , и они всегда будут иметь это отношение.import numpy as np
import time
class Raw:
def __init__(self, x):
self._x = x
@property
def x(self):
return self._x
@x.setter
def x(self, new_value):
self._x = new_value
def update_values(self, counter):
self.x = self.x + counter + np.random.normal(0,0.3)
class Normalised:
def __init__(self, raw_obj: Raw, name=""):
self.raw = raw_obj
self.name = name
self.norm=self.normalise()
@property
def normalise(self):
x = self.raw.x
self.norm = (x - x.min()) / (x.max() - x.min())
print(self.norm)
return self.norm
data_1 = Raw(np.arange(10))
data_2 = Raw(20 * np.arange(10))
data_normalised_1 = Normalised(data_1, "object_1")
data_normalised_2 = Normalised(data_2, "object_2")
while True:
data_1.update_values(1)
data_2.update_values(2)
time.sleep(2)
< /code>
Я не хочу использовать что-то вроде: < /p>
class Raw:
def __init__(self, x,):
self._x = x
self.callbacks=[]
def add_callback(self,callback):
self.callbacks.append(callback)
def update_values(self, counter):
self.x = self.x + counter + np.random.normal(0,0.3)
for callback in self.callbacks:
callback(self.x)
class Normalised:
def __init__(self, raw_obj: Raw, name=""):
self.raw = raw_obj
self.name = name
self.norm=self.normalise()
raw_obj.add_callback(self.normalise)
def normalise(self, x):
self.norm = (x - x.min()) / (x.max() - x.min())
return self.norm
< /code>
, а также не так: < /p>
class Raw:
def __init__(self, x, normal_obj):
self._x = x
self.normal_obj=normal_obj
# rest of code
def update_values(self, counter):
self.x = self.x + counter + np.random.normal(0,0.3)
self.normal_obj.normalise()
Подробнее здесь: https://stackoverflow.com/questions/794 ... tlike-inst
Как получить «детский» метод экземпляра класса, когда обновляется атрибут экземпляра «родитель»? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как я могу обновить атрибут класса, когда я меняю атрибут экземпляра в Python?
Anonymous » » в форуме Python - 0 Ответы
- 139 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Атрибут класса Python: как неявно ссылаться на атрибут родительского класса? [дублировать]
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-