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