【发布时间】:2016-11-01 20:51:31
【问题描述】:
我不确定我是否使用了正确的术语,但这是我的代码:
class Candidate(object):
def __init__(self, party_code, state, age=random.randint(35, 70),
social_index=(1 if party_code == 'dem' else -1 if party_code == 'rep' else 0),
econ_index=(-1 if party_code == 'dem' else 1 if party_code == 'rep' else 0)):
self.state = state
self.party_code = party_code
self.age = age
self.social_index = social_index
self.econ_index = econ_index
我希望能够使用 party_code 来确定 social_index 和 econ_index 的初始值是什么,但这不是我目前的设置方式是不允许的。是否有另一种方法可以在创建此类时动态设置关键字变量?
【问题讨论】:
-
默认值是在定义时(类块执行时)确定的,而不是在函数运行时确定的,只需将确定其值的代码放在函数体中即可。
-
请注意,这就是拥有
__init__方法的全部意义,它可以运行一些代码来创建对象。您的age将始终默认为在定义时仅生成一次的相同数字,而不是每个实例生成一次。 -
所以你是说如果我分别实例化 2 类,年龄值将始终相同?有什么办法可以让每个实例化的随机年龄?
-
您会注意到,在我的回答中,
age默认为None,并在函数体中初始化为随机数。这就是每次运行函数时设置值的方式,在函数体中进行。
标签: python class scope instantiation