我正在找人解释如何使用的基础知识,而不是使用setattr()
.
我的问题是试图使用一个类方法/函数来返回数据,然后将其放入另一个方法/函数中。在这种情况下,也许一种更简单的方法会更好,但我试图了解类是如何工作/使用的。这个问题似乎取决于setattr()
,这是我尝试相当简单地使用它。
虽然这不是同一个问题,但我一直在关注Python The Hard Way,ex42 —while
第 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 感谢您的帮助。
我想我现在可以解释我自己的答案了!这需要我更好地把握作为对象的自我。这是一个实例名称,它被标记为属性之类的东西。
类可以是 Town,然后。
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)