gpt4 book ai didi

python - 为什么返回的字符串可以解释为 python 中的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:47 25 4
gpt4 key购买 nike

我浏览了 Learn python the hard way,我遇到了如下代码片段。但我不明白它背后是什么,一个函数基本上返回一个字符串,它的类有一个同名的函数。并且可以正常调用函数。好吧,当您查看代码时,您就会明白我的意思。

代码:

from sys import exit
class Game(object):
def __init__(self, start):
self.start = start

def play(self):
next = self.start

while True:
print "\n--------"
room = getattr(self, next)
next = room()

def a1(self):
print "You are in a1, redirecting to a2"
return 'a2'
def a2(self):
print "You are in a2, exiting"
return 'death'
def death(self):
print 'You died'
exit(0)


a_game = Game('a1')
a_game.play()

最佳答案

您看到的是 getattr() 内置函数的结果。 Python 是一种高级语言,而且是一种解释型语言。由于 python 中的所有对象基本上都是以哈希表的形式在内存中构建的,因此 Python 具有相当大的 Reflection机制。

这意味着 Python 可以在运行时 检查和修改它自己的类和对象,其中一种方法是使用 getattr() 内置函数。getattr 内置函数在第一个参数中检索成员的name 它在第二个参数。 getattr(x, "y")x.y 基本相同,但 getattr 还允许使用更安全的方法,其中默认值可以是如果成员实际上不存在则给出:getattr(x, "y", "No such member")。如果 x 没有成员 y,则 x.y 将导致 AttributeError 异常。另一方面,gettattr(x, "y", "No such member") 将返回字符串“No such member”并且不会引发异常。

在您的情况下,这些方法作为字符串放置在 next 变量中,并通过放置在 room 中的 getattr() 内置函数进行访问.然后调用 room() 并返回下一个方法名称并将其存储到 next 中。这在 while 循环中重复,直到在 Game.death() 中调用 exit(0)

您还应该看看 setattr()hasattr()

关于python - 为什么返回的字符串可以解释为 python 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282005/

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