Python - передача переменных через методы и классы - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть код, который в общем напоминает следующее:

class ABC(Parent):
    def func1(self, **kwargs)
        start_time = time.time()
        ...
        ...
    return stuff

class XYZ(Parent):
    def func2(self, **kwargs)
        ...
        ...
        a = time.time() - start_time           
    return other_stuff

Я ищу абсолютно простой способ использования переменной start_time, определенной в func1 класса ABC внутри func2 в классе XYZ.

Примечание. Этот код очень универсальный, а фактический код, с которым я работаю, намного, намного сложнее. В других ответах, которые я нашел, упоминалось определение start_time вне любого класса, а затем их передача, ИЛИ они включают изменение аргументов. Я не могу сделать это. Мой start_time должен быть определен именно здесь и нигде больше, и я не могу изменить свои аргументы для func1 или func2.

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Трудно решить вашу проблему способом, который не будет беспорядочным.По сути, вам нужно будет использовать переменную вне обеих ваших функций.Я думаю, что ваш лучший вариант - использовать ключевое слово python global:

class ABC(Parent):
    def func1(self, **kwargs):
        global start_time
        start_time = time.time()

        return stuff

class XYZ(Parent):
    def func2(self, **kwargs):
        global start_time
        a = time.time() - start_time

        return other_stuff

Использование здесь global позволяет избежать определения вашей переменной вне вашей функции.

0 голосов
/ 13 сентября 2018

Есть несколько способов сделать это. Вот тот, который избегает global, делая start_time переменную / атрибут экземпляра ABC и создавая экземпляр ABC в XYZ. Я думаю, что это также то, на что намекал пользователь @Daniel в комментарии «Вы должны передать экземпляр ABC экземпляру XYZ» .

import time


class Parent:
    pass


class ABC(Parent):
    def __init__(self):
        self.start_time = None

    def func1(self):
        self.start_time = time.time()


class XYZ(Parent):
    def __init__(self):
        self.abc = ABC()

    def func2(self):
        self.abc.func1()
        return time.time() - self.abc.start_time           


xyz = XYZ()
print(xyz.func2())

Выход Python3.5:

>>> xyz = XYZ()
>>> print(xyz.func2())
9.5367431640625e-07
0 голосов
/ 12 сентября 2018

Вы можете сделать start_time атрибутом класса в Parent.

class Parent(object):
    def __init__(self):
        self.start_time = None

class ABC(Parent):
    def func1(self, **kwargs)
        self.start_time = time.time()
        ...
        ...
    return stuff

class XYZ(Parent):
    def func2(self, **kwargs)
        ...
        ...
        a = time.time() - self.start_time           
    return other_stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...