gpt4 book ai didi

python - 引用类成员的变量 - Python

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:01 25 4
gpt4 key购买 nike

我正在尝试创建一种方法来将前缀应用于项目,这将修改项目的现有统计信息。例如,在下面的代码中,我尝试将“huge”前缀应用于“jar”项目。我想让代码可重用,这样我就可以有不同的前缀(“快速”、“健康”)来修改不同的项目统计信息。

  • 是否可以在变量中保存类成员的名称?
    • 如果是这样,我有什么理由不应该这样做吗?
    • 如果没有,有哪些替代方案?
class Prefix(object):
def __init__(self, word, stat, valu):
self.word = word
self.stat = stat
self.valu = valu


class Item(object):
def __init__(self, name, size):
self.name = name
self.size = size
def apply_prefix(self, prefix):
self.prefix.stat += prefix.valu # <-- Here is my issue
self.name = prefix.word + ' ' + self.name
# My hope is to make the code reusable for any stat
def print_stats(self):
print self.name, self.size


def main():
jar = Item('jar', 10)
huge_prefix = Prefix('huge', 'size', 5)
jar.apply_prefix(huge_prefix)
jar.print_stats()

最佳答案

您正在尝试动态引用某些属性。您可以使用 getattr 来完成此操作。如果您想设置属性,那么...那就是setattr:)

def apply_prefix(self, prefix):
target_attr = getattr(self,prefix.stat) #dynamically gets attr
setattr(self,prefix.stat,target_attr+prefix.valu)

至于这是否是最好的编码风格:这要看情况。在某些情况下,使用 getattr 可以使代码更加清晰。由于现在您只有两个统计数据,因此需要这种动态属性引用似乎过多,因为我可以轻松做到:

bogus_prefix = Prefix('huge','bogus',3)

这是一个有效的前缀,但当我尝试应用它时会抛出AttributeError。这不是最简单的调试方法。

但是,getattr 方法有一个好处:如果您添加更多统计信息,则不必更改 Prefix 中的一点(哈哈)代码。

还有其他选择吗? Python 中总是有选项。 :-)

我的做法是让 Prefix 只是一个由单词:值对组成的 dict 。然后 apply_prefix 将循环遍历单词键,一次更新尽可能多的值。这是一种类似的动态方法,但更具可扩展性。

关于python - 引用类成员的变量 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com