动态更改类变量的最佳方法

2024-09-29 19:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想动态地更改方法中的类变量。最好的方法是什么?我不知道最好的做法是什么。目前我得到了错误:AttributeError: 'str' object has no attribute 'text',因为python无法将我更改的str识别为对象

self.LE_Donald_name是Qt中已经创建的一个按钮,因此它是我的类的一个现有对象,例如,在某些情况下,我想调用一个名为self.LE_Matthew_name的按钮

我正在尝试动态调用类的现有对象

我运行方法:

self.filter_contact_entry_widget("Donald")

调用我的类方法。

def filter_contact_entry_widget(self, occGroup):
        sample_entry = "LE_" + occGroup + "_name"
        main_contact = "LE_" + occGroup + "main_contact"
        stand_in_contact = "LE_" + occGroup + "stand_in_contact"

        search_results = self.sApp.search_contact_by_company(self.sample_dicts, self.sample_entry.text())

我对我的问题做了一个简化版本来澄清我的问题:

class MyClass:
    def __ini__(self):
        self.LE_donald_name = "Donald Duck"
        self.LE_mickey_name = "Mickey Mouse"

    def call_firstname(self, firstName):
        sample_entry = "LE_" + firstName + "_name"
        self.my_print(self.sample_entry)

    def my_print(self, userInput):
        print(userInput)

if __name__ == '__main__':
    MyClass().call_firstname("donald")

Tags: sample对象方法nameselflemaindef
1条回答
网友
1楼 · 发布于 2024-09-29 19:20:26

让我们看看第一行发生了什么

sample_entry = "LE_" + occGroup + "_name"

这将创建一个局部变量sample_entry,它是一个类似于"LE_Donald_name"的字符串

但您不需要该字符串,而是需要属于该对象的名为"LE_Donald_name"的属性,即self.LE_Donald_name。即使有一个名为sample_entry的局部变量包含"LE_Donald_name",也不能通过self.sample_entry访问self.LE_Donald_name。相反,使用^{}(这正是这个内置函数存在的原因)

def filter_contact_entry_widget(self, occGroup):
    sample_entry = "LE_" + occGroup + "_name"
    # ...
    button = getattr(self, sample_entry)  # Get, e.g., self.LE_Donald_name.
    search_results = self.sApp.search_contact_by_company(self.sample_dicts, button.text())

为了确认您得到了想要的东西,您可以尝试类似print(type(button))的方法

相关问题 更多 >

    热门问题