最佳答案
我正在寻找一个人来解释如何使用的基本知识,而不是使用 setattr()
。
我的问题出现在试图使用一个类方法/函数来返回数据,然后将这些数据放入另一个方法/函数中。在这种情况下,一种更简单的方法可能会更好,但是我试图理解类是如何工作/使用的。这个问题似乎取决于 setattr()
,这是我尝试使用它的一个相当简单的方法。
虽然这不是完全相同的问题,但我遵循 巨蟒之路,第42集 & mash; 的 while
循环@line 18-41。
我尝试编写一个 \__init__()
代替使用 getattr()
,认为可能需要在类的名称空间中包含一些内容,但这似乎没有帮助。
#! /bin/python2.6
class HolyGrail(object):
def __init__(self):
self.start = 'start_at_init'
# function definition in question:
# TypeError: 'str' object is not callable
def run_it(self):
start = setattr(self, 'name', 'get_thing')
start = self.name
# Something wrong here?
value_returned = start() #I believe this == self.get_thing()
use_it(value_returned)
"""
# alternate function definitions
# NameError: global name 'start' is not defined
def __init__(self):
self.start = 'get_thing'
def run_it(self):
go_do_it = getattr(self, start)
first_output = go_do_it()
use_it(first_output)
"""
def get_thing(self):
return "The Knights Who Say ... Ni!"
def use_it(self, x):
print x
print "We want a shrubbery!"
my_instance = HolyGrail()
my_instance.run_it()
@ Karl Knechtel@Amber@Chris Morgan 谢谢你的帮助。
我想我现在可以解释我自己的答案了!对我来说,这需要更好地把握自我作为一个对象。它是一个实例名,用属性之类的东西进行标记。
班级可以是一个城镇,然后。
getattr
寻找一个房子使用它的名字,所以你准备呼吁它很快,并提出了一个不同的地方,如果你没有找到房子
--使用 getattr
存在一个“名称”,并且您可以找到它
作为奖励,你可能有一个默认值,有用得到一个回退默认方法-连接失败或什么?
setattr
建造了一座房子,并给它起了一个名字,这样你以后就可以拜访它了。
你可以重建这所房子,或者去一个特定的地方,如果你无法找到它。
—— setattr
创建一个属性名,并给出或更改它的值,以供稍后调用
也许用户关闭了声音,那么未来的方法不会输出任何音频。
我可以通过多种方式编写函数,但是不需要更改任何属性:
def run_it(self):
yo = getattr(self, 'get_thing')
answer = yo()
setattr(self, 'deal_accepted', self.use_it) #really ott
no = getattr(self, 'deal_accepted')
no(answer)
正确修改代码:
def run_it(self):
value_returned = self.get_thing()
self.use_it(value_returned)