在 python 中使用 setattr()

2023-11-23

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

The Python 文档就我所见,说出所有需要说的。

setattr(object, name, value)

这是对应的getattr()。参数是一个对象、一个字符串和一个任意值。该字符串可以命名现有属性或新属性。如果对象允许,该函数会将值分配给属性。例如,setattr(x, 'foobar', 123)相当于x.foobar = 123.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 中使用 setattr() 的相关文章

随机推荐

  • 如何在 swift 3.0 中连接多个可选字符串?

    我正在尝试在 swift 3 中连接多个字符串 var a String a var b String b var c String c var d String a b c 编译时我收到以下错误 error cannot convert
  • 如何在 tail -f 命令后继续运行脚本

    我有以下脚本 tail f nohup out echo 5 When I press Ctrl C on tail f the script stops running the 5 is not printed How can I run
  • JScript.NET 可以用于编写 .NET 应用程序脚本吗?

    自从多发性硬化症似乎已在最新的 DLR 中终止了托管 JavaScript对于服务器端 ASP NET Futures 和客户端 Silverlight 是否有人成功使用未过时的 API 来允许使用 JScript NET 编写其应用程序对
  • Javamail API - 如何将 setFrom 更改为您想要的任何内容?

    如何将 setFrom 方法更改为我想要的方法 我可以通过我的 gmail 帐户发送电子邮件并更改 setFrom 文本 但它显示了我的username对于电子邮件 我也尝试使用我的雅虎帐户 但收到身份验证错误 我想更改发件人地址 代码如下
  • 如何绑定到 CaretIndex 又名文本框的光标位置

    嗨 我正在尝试绑定到TextBox CaretIndex属性不是DependencyProperty 所以我创建了一个Behavior 但它没有按预期工作 期望 集中注意力时 默认 0 如果我改变我的值view它应该改变我的值视图模型 如果
  • 以第一个元素作为主元的快速排序示例

    我目前正在研究快速排序 想知道当第一个 或最后一个 元素被选为枢轴点时它是如何工作的 比如说我有以下数组 15 19 34 41 27 13 9 11 44 这就是我认为发生的情况 15 19 34 41 27 13 9 11 44 piv
  • InvalidOperationException:堆栈为空

    我的应用程序工作正常 但突然停止工作并给出以下错误 InvalidOperationException Stack empty System ThrowHelper ThrowInvalidOperationException Except
  • 使用 phantomjs 的 cntlm 代理

    我正在尝试在 Windows 计算机上使用 cntlm 代理来与 IIS 上使用 PhantomJS 的 Windows 身份验证的本地 Web 应用程序进行通信 要创建代理 我正在执行以下操作 cntlm v u username dom
  • django-为什么重定向后,表单显示“无”

    我有一个表单 输入信息后 根据信息过滤数据库并进行一些计算 最后将结果显示到重定向的网址 我确实可以重定向到另一个网址并成功显示结果 但问题在于它无法显示用户提交的任何数据 只是对每个字段不显示任何内容 并且结果不是基于过滤后的查询集 比如
  • 用opencv找到手绘线的端点

    我试图找到手绘线的两个端点 我写了这个找到轮廓的片段 但终点不正确 img cv2 imread my img jpeg img gray cv2 cvtColor img cv2 COLOR BGR2GRAY Binary Thresho
  • 限制可以在范围内运行的协程的最大数量

    我正在将当前的应用程序从 Java 翻译为 Kotlin 并且遇到了这个问题 java实现过去使用线程从服务器传输数据 它将创建大约 100 个不同的线程来请求数据 但据我所知 一次运行的线程不会超过 4 个 其他线程会等待线程完成后再开始
  • JQuery 或 JavaScript:如何确定在单击锚标记超链接时是否按下了 Shift 键?

    我有一个调用 JavaScript 函数的锚标记 无论有没有 JQuery 如何确定单击链接时是否按下了 Shift 键 以下代码不起作用 因为只有按下 真实键 而不是 Shift 键 时才会触发按键 我希望如果只按下 Shift 键它就会
  • Rails 嵌套表单错误,子项必须存在

    我正在遵循教程 http www amooma de screencasts 2015 01 22 nested forms rails 4 2 我正在使用 Rails 5 0 0 1 但是当我注册酒店时 似乎酒店类别必须存在 1 个错误导
  • Angular ngx-datatable 一列中的多个数据

    我在向 ngx datatable 中的列添加多个 prop 时遇到了一个小问题 columns prop semesterName name resizeable false prop eventName name resizeable
  • 自动启动AppFabric缓存集群

    有没有办法在系统启动时自动启动缓存集群 我在远程 PC 上运行它 当它重新启动时 我必须远程进入它并使用 Start CacheCluster 从 Powershell 重新启动缓存集群 并且不想这样做 Thanks James Yes i
  • 将自定义对象保存在共享首选项中

    我想保存自定义对象myObject在共同的偏好中 这个自定义对象的位置ArrayList
  • 错误页 - 如何在 JSP 中打印堆栈跟踪

    我已经使用 spring SimpleMappingExceptionResolver 在 Spring 应用程序中创建了异常处理 一切正常 现在我需要以某种方式打印 jsp 页面中捕获的异常 像消息和堆栈跟踪之类的东西 在我的 jsp 中
  • 使用一对多关系时,有没有办法控制子实体的顺序?

    根据https developer android com training data storage room relationships 我们可以有一对多的关系 public class UserWithPlaylists Embedd
  • 如何在 EditText 中设置文本

    如何设置 EditText 的文本 如果您检查文档EditText 你会发现一个setText 方法 它需要一个String and a TextView BufferType 例如 EditText editText EditText f
  • 在 python 中使用 setattr()

    我正在寻找有人解释如何使用的基础知识 而不是使用setattr 我的问题出现在尝试使用一个类方法 函数返回数据 然后将其放入另一个方法 函数中 在这种情况下 也许更简单的方法会更好 但我试图理解类是如何工作 使用的 这个问题似乎取决于set