当前位置: 首页 > 编程笔记 >

Python实例变量的默认值

卜存
2023-03-14
本文向大家介绍Python实例变量的默认值,包括了Python实例变量的默认值的使用技巧和注意事项,需要的朋友参考一下

示例

如果变量包含不可变类型的值(例如字符串),则可以分配这样的默认值

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 问题答案: 类变量对于所有实例使用的“常量”非常有用(从技术上讲,所有方法都是如此)。您可以使用模块全局变量,但是使用类变量会使它与类更明确地关联。 您实际上也经