如果变量包含不可变类型的值(例如字符串),则可以分配这样的默认值
class Rectangle(object): def __init__(self, width, height, color='blue'): self.width= width self.height= height self.color= color def area(self): returnself.width *self.height # 创建类的一些实例 default_rectangle = Rectangle(2, 3) print(default_rectangle.color) # 蓝色 red_rectangle = Rectangle(2, 3, 'red') print(red_rectangle.color) # 红
在初始化可变对象(例如构造函数中的列表)时,需要小心。考虑以下示例:
class Rectangle2D(object): def __init__(self, width, height, pos=[0,0], color='blue'): self.width= width self.height= height self.pos= pos self.color= color r1 = Rectangle2D(5,3) r2 = Rectangle2D(7,8) r1.pos[0] = 4 r1.pos # [4,0] r2.pos # [4,0] r2's pos has changed as well
此行为是由于以下事实引起的:在Python中,默认参数是在函数执行时绑定的,而不是在函数声明时绑定的。要获得实例之间不共享的默认实例变量,应使用如下结构:
class Rectangle2D(object): def __init__(self, width, height, pos=None, color='blue'): self.width= width self.height= height self.pos= pos or [0, 0] # 默认值为[0,0] self.color= color r1 = Rectangle2D(5,3) r2 = Rectangle2D(7,8) r1.pos[0] = 4 r1.pos # [4,0] r2.pos # [0,0] r2的位置未更改
另请参见可变默认参数和“最小惊讶”和可变默认参数。
问题内容: 我读到Java为类属性提供了默认值,但没有为局部变量提供默认值。那是对的吗?如果是这样,背后的原因是什么?当您做某件事时,为什么不一直这样做呢? 谢谢你, 罗杰 问题答案: 标准局部变量存储在堆栈中,直到初始化后才真正创建。如果未使用局部变量,则它不会进入堆栈。但是,成员变量在堆中分配,因此具有默认的占位符(空引用或默认原语)。
问题内容: 我应该给班级成员这样的默认值吗? 还是这样? 在这个问题中,我发现在两种情况下 是一个定义明确的操作。 我知道第一个方法会给我一个类变量,而第二个方法则不会。但是,如果我不需要类变量,而只需要为实例变量设置默认值,那么这两种方法是否一样好?还是其中一个比另一个更“ pythonic”? 我注意到的一件事是,在Django教程中,他们使用第二种方法声明模型。我个人认为第二种方法更优雅,但
经过在internet上的搜索,我知道了在交互式/非交互式-登录/非登录shell组合的情况下应该在哪里更改PATH变量的值。 从另一个帖子中找到的 我有“/bin/sh”作为缺省登录shell,只有/etc/profile文件用于导出系统中所有需要的环境变量。在非交互式登录shell的情况下,/etc/profile也不会被引用,尽管上面的link说它会被引用。但当我执行时, 我可以看到PATH
行动时刻 - 设置变量的默认值 我们并不总是确定变量是否存在。 Unlang为我们提供了语法,以便在变量不存在时指定默认值。 我们将再次通过修改上一个练习来证明这一点。 我们将使用radtest首先在请求中包含Framed-Protocol = PPP,并将其排除在外。 如果Framed-Protocol AVP不存在,我们将返回一个默认字符串。 编辑FreeRADIUS配置目录下的sites-a
问题内容: 为什么在类中声明的变量具有默认值,但是在方法内部声明的变量(称为“局部变量”)在Java中没有默认值? 例如 在上面的示例中,变量的默认值为0,但是变量给出了可能尚未初始化的错误。 问题答案: 所有成员变量都必须加载到堆中,因此在创建类的实例时必须使用默认值进行初始化。对于局部变量,它们不会被加载到堆中,直到在Java7之前被使用,它们才会存储在堆栈中,因此我们需要显式初始化它们。现在
问题内容: 我在下面的示例中进行了尝试,并需要进行澄清。在这两种情况下,我都可以在测试函数中访问类变量和实例。 因此,假设是否必须定义一个需要在所有函数中使用的文字,这将是定义..self变量或class变量的更好方法? code.py 问题答案: 类变量对于所有实例使用的“常量”非常有用(从技术上讲,所有方法都是如此)。您可以使用模块全局变量,但是使用类变量会使它与类更明确地关联。 您实际上也经