Боковая связь между объектом и функцией, назначенной переменной - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть определенные объекты, которые развиваются в рамках подпрограммы и подпрограммы.И я хочу проверить состояние этих переменных с помощью проб.

Например, давайте назовем этот класс пьяным.

class drunk (object):
    def __init__(self):
        self.position = 0
        self.probability = 0.5
    def take_a_step():
        # code that will make the drunkard change its position

Затем я могу сгенерировать много пьяниц и поместить их в класс.толпа.

class crowd (object):
    def __init__(self):
        self.inidividuals = num.array([])

Я хотел бы создать «зондирующий» объект, который можно назначить любому из этих объектов, но у меня есть проблемы с реализацией.

class probe (object):
    def __init__(self):
        self.function = None
        self.data = num.array([])

Я хочу назначить зонды любому пьянице, зонд извлечет любую информацию из толпы или пьяницы, которая определена в функции, находящейся в probe.function.

Но, насколько мне известно, я могу назначить зонды, помещая их в список в этих классах, и вызывать их, ссылаясь на функции в методах классов толпы и пьяницы.

Но для того, чтобы сделать это,

probe_mean = probe()
def probe_function():
    #
    #
    #
probe_mean.function = probe_function()

Но так как я хочу сослаться на переменную в классе, функция которого будет в списке, кажется, что я должен определить функцию как

Но для того, чтобы сделать это,

probe_mean = probe()
def probe_function(probed):
    return probed.position.mean()
probe_mean.function = probe_function(drunk_53)

drunk_53.probes.append(probe_mean)

У меня есть ощущение, что эти объекты должны ссылаться друг на друга, чтобы это работало, это не так, как ондолжно быть.

Я подумал, что должен быть способ справиться с этим без повторного введения в функцию drunk_53, что-то вроде super (), которое разрешит вертикальную ассоциацию.

Яне имеет опыта в ООП, поэтому я прошу наиболее подходящий способ (Pythonic, элегантный и т. д.), чтобы сделать это.Каковы ваши мнения?Какой подход вы бы выбрали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...