gpt4 book ai didi

Python 我可以从另一个类访问类方法而不将其作为参数传递吗?

转载 作者:行者123 更新时间:2023-12-01 05:08:47 25 4
gpt4 key购买 nike

使用 LearnPythonTheHardWay 中的 ex43.py(制作游戏)进行实验并使用 time.sleep()在事件之间创建暂停。为了启用和禁用该功能,或更改暂停的长度,我只是在 class Engine() 中保存一个变量。 ,这是从对 time.sleep() 的调用中引用的贯穿整个计划。

所以:

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 的优势,除非您想在游戏期间更改它。

传递time.sleep(1)看起来相当乏味。我想说每次调用 time.sleep(Class.var) 是可以的,并且可以使代码更清晰。

我还测试了您的代码,并且通过暂停并没有给它带来任何优势:

  • 代码更难阅读
  • 您需要通过执行以下操作来调用它:self.pause(Engine.sleep1),这是time.sleep(Engine.sleep1)的一个奇怪的别名。这一秒不被记住,因此您必须再次将其输入到 time.sleep() 编辑如下
  • 您有更多看起来晦涩难懂的源代码行,这使得维护变得更加困难

保持简单。 time.sleep(Engine.sleep1) 很好。

一个小补充:如果您只等待特定函数,那么调用 time.sleep() 就完全没问题了。但是,如果您在每个函数之后执行此操作,也许您可​​以执行某种“操作队列”并在每个函数完成后调用 time.sleep() 。这样,如果您的逻辑发生变化,您可以更新一行代码。

编辑:为了保留time.sleep()的函数及其参数,我将执行以下操作:

MY_SLEEP = 1

def my_pause():
time.sleep(MY_SLEEP)

my_pause() # waits 1 second
my_pause() # waits 1 second again.

但话又说回来,你可以简单地:

time.sleep(MY_SLEEP)

每次...

编辑2在这里,我将这个想法与静态方法和打印结合到了 say() 函数中。

import time

MY_SLEEP = 1 # inside a config file

class Engine(object):

@staticmethod
def say(text):
print(text)
time.sleep(MY_SLEEP)

#some methods
def say_hello(self, exit):
Engine.say("Hello")
exit.say_goodbye()

class Another(object):

def say_goodbye(self):
Engine.say("ok")
Engine.say("goodbye")

me = Engine()
bye = Another()
me.say_hello(bye)

当我谈论 Action 队列时,它更像是一个列表,其中包含每轮要调用的类/函数/参数。然后,循环会每次从队列中弹出一个元素,执行操作,等待一秒钟,然后重新开始。

关于Python 我可以从另一个类访问类方法而不将其作为参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com