当前位置: 首页 > 面试题库 >

在python中使用setattr()

孙朗
2023-03-14
问题内容

我正在寻找可以解释如何使用而不是的基础知识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