Pythonic方式切换对象"在幕后"

时间:2017-03-30 12:09:14

标签: python

我知道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

每次我切换当前的车。我想过为这个使用一个房产装饰师,但我并不害羞,这是正确的方式。是否有一种pythonic方式来做到这一点,还是我在一起思考错误的方向?

2 个答案:

答案 0 :(得分:1)

我只能想到__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的任何直接分配都会打破魔法,并且它不是一个字符串......

答案 1 :(得分:1)

嗯,事实证明,我脑中有一个奇怪的结,这使我无法理解即使是最简单的编程基础知识。对于其他人不太可能出现同样的死胡同(并碰巧找到这篇文章),这就是我打算做的事情:

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

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

current_car = subaru

def current_brand():
    return current_car.brand

print (current_brand())

current_car = toyota

print (current_brand())

我没有得到我尝试做的就是拥有一个能够给我当前汽车品牌的功能。

好吧,也许我应该休息一下,然后去外面玩一会儿......