python 变量默认值_如何在Python中声明实例变量的默认值?

这两个片段所做的事情是不同的,所以这不是品味的问题,而是在你的环境中什么是正确行为的问题。Python文档解释了两者之间的差异,但以下是一些示例:

证物Aclass Foo:

def __init__(self):

self.num = 1

这结合了num敬福实例...。对此字段的更改不会传播到其他实例。

因此:>>> foo1 = Foo()

>>> foo2 = Foo()

>>> foo1.num = 2

>>> foo2.num

1

展览Bclass Bar:

num = 1

这结合了num敬福类...。改变被传播!>>> 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值