我知道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方式来做到这一点,还是我在一起思考错误的方向?
答案 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())
我没有得到我尝试做的就是拥有一个能够给我当前汽车品牌的功能。
好吧,也许我应该休息一下,然后去外面玩一会儿......