Как получить «детский» метод экземпляра класса, когда обновляется атрибут экземпляра «родитель»?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как получить «детский» метод экземпляра класса, когда обновляется атрибут экземпляра «родитель»?

Сообщение Anonymous »

Я пытаюсь получить поведение, в котором метод экземпляра детского класса запускается в качестве ответа на атрибут экземпляра родителя, обновляется. Дочерний класс может наследовать от родителей, если это единственный способ сделать это. Мне известно о наблюдателях/обратных вызовах, а затем запускаю функции обратного вызова после обновления, но я хочу, чтобы нормализовать можно было вызвать без явного кодирования. />
Атрибуты экземпляра в приведенном ниже коде не могут быть атрибутами класса < /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»