基本上我想寫一個setter,它可以根據輸入修改不同的類變數。例如:
@dataclass
class Rocket。
燃料。int Rocket: 燃料:int
氧化劑。intint
功率。int功率: int
# I actually have tons of variables[/span]。
def decrease_value(self, value, amount)。
# magically match value to self.`value`.
# 從匹配的類變數中減去金額。
r = Rocket
r.decrease_value('fuel', 200)
r.decrease_value('weight', 55)
這樣的東西會比我不想寫的巨大的else if鏈好得多。
uj5u.com熱心網友回復:
是的,你可以,但請注意,這不是最好的做法,因為靜態代碼分析器將無法發現你的bug:
from dataclasses import dataclass
@dataclass[/span
class Rocket:
燃料。int Rocket: 燃料:int
氧化劑。intint
功率。int功率: int
# I actually have tons of variables[/span]。
def decrease_value(self, value, amount)。
if value in self.__dict__: # check if the attribute name is valid.
self.__dict__[value] -= amount
r = Rocket(燃料=1000, 氧化劑=2000, 重量=3000, 功率=4000)
r.decrease_value('fuel', 200)
r.decrease_value('weight', 55)
r.decrease_value('foobar', 55) # 這將不會導致錯誤。
print(r)
這將列印
這將列印
Rocket(fuel=800, oxidizer=2000, weight=2945, power=4000)
uj5u.com熱心網友回復:
你可以通過getattr和setattr方法來實作,比如
class Rocket:
燃料。int = 0
氧化劑。int = 0
重量。int = 0
功率。int = 0
# 我實際上有大量的變數。
def __init__(self, fuel, oxidizer, weight, power)。
# 初始化初始值
self.fuel = fuel
self.oxidizer = oxidizer
self.weight = weight
self.power = power
def decrease_value(self, value, amount)。
# magically match value to self.`value`: 匹配值。
# 從匹配的類變數中減去金額。
try:
value_is = getattr(self, value)
setattr(self, value, (value_is - amount))
except AttributeError:
print(f'{value}變數在火箭類中不可用'/span>)
r = Rocket(燃料=100, 氧化劑=100, 重量=100, 功率=100)
r.decrease_value('fuel', 200)
r.decrease_value('weight', 55)
請看getattr和setattr方法的細節,它將給你更多的理解
。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306635.html
標籤:
