我正在寻找可以解释如何使用而不是的基础知识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感谢您的帮助。
我想我现在可以解释我自己的答案了!作为我的对象,这需要更好地把握自我。这是一个实例名称,上面标记着诸如属性之类的东西。
班级可能是城镇,然后是。 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)
要设置self.name
的 字符串 "get_thing"
,而不是功能get_thing
。
如果要self.name
成为一个函数,则应将其设置为一个:
setattr(self, 'name', self.get_thing)
但是,这对于您的其他代码是完全不必要的,因为您可以直接调用它:
value_returned = self.get_thing()
问题内容: 我有一个使用100%Java编写的大型现有代码库,但是我想在它的一些新部分中使用Python。我需要进行一些文本和语言处理,而我宁愿使用Python和类似NLTK的库来执行此操作。 我知道Jython项目,但这似乎代表了一种从Python内部使用Java及其库的方法,而不是相反的方式-我对此是否错? 如果没有,那么在Java和Python之间进行交互的最佳方法是什么,这样(理想情况下)
问题内容: 我正在浏览文档,并遇到了以下示例: 我不明白的是这里的lambda和学生是什么?可以用其他任何名称代替它们吗?和什么做的?这有点模棱两可,因为我以前从未遇到过。 问题答案: 从语义上说: 与此相同: 只是为函数定义提供了另一种语法。结果是一个函数对象,就像由创建的对象一样。但是,有些功能是功能无法完成的,例如定义新变量。它们非常适合(取决于您要问的人)创建较小的一次性功能,例如此功能。
问题内容: 我需要使用python处理XSLT,目前我正在使用仅支持XSLT 1的lxml,现在我需要处理XSLT 2,有没有办法在Python中使用saxon XSLT处理器? 问题答案: 有两种可能的方法: 设置一个接受转换请求的HTTP服务,并通过从Java调用Saxon来实现它们;然后您可以通过HTTP通过Python发送转换请求 使用Saxon / C产品 (当前在预发行版中可用) :此
问题内容: 我在玩耍时偶然发现了Python中的一个函数。我想不出需要此功能的情况,除了可能是语法糖。谁能举一个例子? 问题答案: 并且是一种方便快捷的方法,可以动态地获取一些源代码,也许要稍加修改然后再执行- 但是,它们从来不是最好的方法,尤其是在生产代码中,而不是“快速而又简单”脏”的原型&c。 例如,如果我不得不处理这样的动态Python源代码,那么我会使用ast模块-比得多(比它更安全(您
我得到了我的旋转值从OPI0到我的电脑,现在我想让一个物体在我的陀螺仪面对的方向旋转(度数值从180到-180)我对Python相当陌生。glRotatef(1,xrot,yrot,zrot)只设置当前旋转的旋转。但是我实际上想要的是,如果它是180度,我想把它放到180度。这可以通过获取当前旋转来归档,测试它是否变小或变大,然后调整旋转或用命令设置旋转到度数值。所以我的主要问题是:有没有设置创建
本章介绍如何使用Python编程语言对JSON对象进行编码和解码。让我们从准备环境开始,使用Python for JSON开始编程。 环境 在开始使用Python编码和解码JSON之前,需要安装任何可用的JSON模块。在本教程中,我们已经下载并安装了Demjson,如下所示 $tar xvfz demjson-1.6.tar.gz $cd demjson-1.6 $python setup.p