python instance variable,我应该如何在python中声明实例变量的默认值?

这两个片段做了不同的事情,所以这不是一个品味的问题,而是一个在你的上下文中什么是正确的行为的问题。

Python documentation

解释不同之处,但以下是一些示例:

附件A

class Foo:

def __init__(self):

self.num = 1

这种束缚

num

到比赛场地

实例

. 对此字段的更改不会传播到其他实例。

因此:

>>> foo1 = Foo()

>>> foo2 = Foo()

>>> foo1.num = 2

>>> foo2.num

1

附件B

class Bar:

num = 1

这种束缚

号码

去酒吧

. 更改已传播!

>>> bar1 = Bar()

>>> bar2 = Bar()

>>> bar1.num = 2 #this creates an INSTANCE variable that HIDES the propagation

>>> bar2.num

1

>>> Bar.num = 3

>>> bar2.num

3

>>> bar1.num

2

>>> bar1.__class__.num

3

实际答案

如果我不需要一个类变量,但只需要为我的实例变量设置一个默认值,那么这两种方法是否都一样好?或者其中一个比另一个更“蟒蛇”?

图表B中的代码显然是错误的:为什么要将类属性(实例创建时的默认值)绑定到单个实例?

附件A中的代码是可以的。

但是,如果要为构造函数中的实例变量提供默认值,我会这样做:

class Foo:

def __init__(num = None):

self.num = num if num is not None else 1

…甚至:

class Foo:

DEFAULT_NUM = 1

def __init__(num = None):

self.num = num if num is not None else DEFAULT_NUM

…甚至:(首选,但如果且仅当您处理不可变类型时!)

class Foo:

def __init__(num = 1):

self.num = num

您可以这样做:

foo1 = Foo(4)

foo2 = Foo() #use default

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值