gpt4 book ai didi

切换对象的 Pythonic 方式 "behind the scenes"

转载 作者:行者123 更新时间:2023-12-01 03:08:20 26 4
gpt4 key购买 nike

我知道Python对象名称的本质只不过是可以附加到任何对象的“标签”,并且变量总是通过引用传递。但是如果我需要不同的行为怎么办?

为了说明这一点,我做了一个简短的例子:

class car:
def __init__(self, brand):
self.brand = brand

subaru = car("subaru")
toyota = car("toyota")

current_car = subaru
current_brand = current_car.brand

print (current_brand)

current_car = toyota

print (current_brand)

我得到的输出是:

subaru
subaru

这并不令我惊讶。然而,在我现在正在进行的项目中,我想通过将 current_car 设为所选汽车来表达选择。另外,我希望对象 current_brand 始终保留当前汽车的品牌,而无需明确执行以下操作:

current_brand = current_car.brand

每次我切换当前汽车时。我考虑过为此使用属性装饰器,但我不确定这是正确的方法。有没有一种Python式的方法可以做到这一点,或者我的想法完全错误?

最佳答案

我只能想到一个__repr__技巧:当你显示、打印或将对象转换为字符串时,你使用它的__repr__方法进行转换。在这里,您可以尝试:

class CurrentBrand:
def __repr__(self):
return current_car.brand
current_brand = CurrentBrand()

现在,如果你这样做:

subaru = car("subaru")
toyota = car("toyota")

current_car = subaru
print (current_brand)

current_car = toyota
print (current_brand)

输出将如预期:

subaru
toyota

这个技巧的局限性在于,任何对 current_car 的直接赋值都会破坏魔法,而且它不是一个字符串......

关于切换对象的 Pythonic 方式 "behind the scenes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117473/

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