【问题标题】:Python - Assign class attribute to a variablePython - 将类属性分配给变量
【发布时间】:2021-12-02 01:08:26
【问题描述】:

我正在制作一个类似字典的应用程序,根据翻译开关,屏幕显示翻译或原始单词 代码如下所示:

PS:“textFunction(text)”只是一个在屏幕上显示文本的函数。 PS:“wordList”是Word Class实例的列表

class Word:
  def __init__(self, original, translation):
      self.original = original
      self.translation = translation

translation = False
if translation == False:
    wordDisplayed = .original
elif translation == True:
    wordDisplayed = .translation

textFunction(wordList[X].wordDisplayed)

但是,这不起作用。我该如何解决这个问题?

【问题讨论】:

    标签: python list oop variables methods


    【解决方案1】:

    你会使用getattr:

    wordDisplayed = "translation" if translation else "original"
    textFunction(getattr(wordList[X], wordDisplayed))
    

    【讨论】:

    • 谢谢你!我会尽快将您的答案标记为正确
    【解决方案2】:

    虽然“getattr”是一种可能的解决方案,但我想说在你的类中添加一个get 函数会使这一切更具可读性和可维护性:

    class Word:
        def __init__(self, original, translation):
            self.original = original
            self.translation = translation
        def get(self, translation):
            return self.translation if translation else self.original
    
    words = [Word("hello", "hallo"), Word("world", "Welt")]
    
    for w in words:
        print(w.get(False), w.get(True))
    

    输出:

    hello hallo
    world Welt 
    

    【讨论】:

    • 感谢迈克的建议!我会尝试实现它。我对整个 OOP 哲学和 getter-setter 函数有点陌生。干杯!
    • get 违反了“规则”,即函数应该基于布尔参数执行两件不同的事情。像def get(self, version): return self.translation if version == "translation" else self.original 这样的东西稍微好一些,因为现在这个论点明确地告诉你更多关于会发生什么的信息。 (但仍然将概念上应该是两种方法的方法压缩为一种。)
    • @chepner 恕我直言,它归结为文档。就个人而言,我认为在这种情况下,如果返回的值只能是两个值之一,则字符串会留下太多错误空间。但是,如果仅仅是位置参数不是“那么好”,那么使用 def get(self, *, translation=False): 强制执行命名参数怎么样 - 这样调用者将不得不显式编写 w.get(translation=True),从而更清楚您将从该方法返回的内容.
    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多