Экспериментируйте с ex43.py (создайте игру) из LearnPythonTheHardWay и с помощью time.sleep()
создайте паузы между событиями. Чтобы включить или отключить функцию или изменить длину пауз, я просто держу переменную в class Engine()
, на которую ссылаются от звонков на time.sleep()
по всей программе.Python может ли я получить доступ к методу класса из другого класса, не передавая его в качестве параметра?
Итак:
import time
class Engine(object):
sleep1 = 1
#some methods
def say_hello(self, exit):
self.exit = exit
print "Hello"
time.sleep(Engine.sleep1)
self.exit.say_goodbye()
class Another(object):
def say_goodbye(self):
print "ok"
time.sleep(Engine.sleep1)
print "goodbye."
me = Engine()
bye = Another()
me.say_hello(bye)
Вопрос заключается в том, если я хочу time.sleep(1)
быть доступны для нескольких методов различных классов, это необходимо передать каждый метод, который нуждается в ней в качестве параметра, как это:
import time
class Engine(object):
sleep1 = 1
#some methods
def say_hello(self, exit):
self.exit = exit
print "Hello."
time.sleep(Engine.sleep1)
pause = time.sleep
self.exit.say_goodbye(pause)
class Another(object):
def say_goodbye(self, pause):
self.pause = pause
print "ok"
self.pause(Engine.sleep1)
print "goodbye."
me = Engine()
bye = Another()
me.say_hello(bye)
И для того, чтобы иметь только одно место, где можно установить продолжительность паузы, есть улучшение на простом вызов time.sleep(Class.var)
от какого-либо метода?
Благодарим вас за отзыв о создании SLEEP1 вне класса, чтобы сделать его доступным по всему миру (и присвоить имена CAPS). Но вопрос в том, действительно ли должен быть передан метод как параметр, доступный в рамках другого метода классов? И во-вторых, есть ли способ присоединить метод AND его параметр вместе, например, 'var = time.sleep (1)' (который, как я знаю, не будет работать, потому что он просто ссылается на возвращаемое значение функции) – MikeiLL
Если это экземпляр метод, вам придется передать его как параметр, который будет доступен в другом классе, я думаю. Если это '@ staticmethod', вы можете вызвать его, не передавая его в качестве параметра (см. Http://stackoverflow.com/questions/735975/static-methods-in-python) – achedeuzot
О вашем втором вопросе, как я это определяет функцию, называемую 'my_sleep()', в которой у меня есть 'time.sleep (1)'. Поэтому каждый раз, когда я называю свою функцию, он спит в течение 1 секунды. См. Править выше (в ответе) – achedeuzot