Python学习日记——def __init__( ):函数

在Python中,__init__方法是类的构造函数,用于在创建对象时进行初始化。它可以接受参数也可以不接受参数,具体的选择取决于你是否希望在创建对象时传入初始值。
 

无参数的 __init__ 方法

无参数的 __init__ 方法通常在类定义时使用默认值来初始化属性,而不需要在创建对象时传入任何参数。

class Student:
    def __init__(self):
        self.name = "Unknown"  # 默认值
        self.grade = 0         # 默认值

    def print_info(self):
        print(f"{self.name}'s grade is {self.grade}")

# 使用无参数的__init__方法创建对象
s1 = Student()  # 不传入任何参数
s1.print_info()  # 输出: Unknown's grade is 0

解释:

  • __init__ 方法不接受任何参数,因此创建对象时不传入任何值。
  • 属性 namegrade 都使用默认值进行初始化,之后也可以手动修改这些值。
     
  • 无参数的 __init__ 方法也可以在创建对象后手动赋值属性,只是不能在创建对象时直接传参。下面是两种方法来实现属性赋值。

    方法一:对象创建后手动赋值

    无参数的 __init__ 方法不能在对象创建时传入参数,只能在创建对象后手动设置属性的值。     

    class Student:
        def __init__(self):  # 无参数初始化
            self.name = None
            self.grade = None
    
        def print_info(self):
            print(f"{self.name}'s grade is {self.grade}")
    
    # 创建对象
    s1 = Student()
    s1.name = "Tom"   # 手动赋值
    s1.grade = 8      # 手动赋值
    s1.print_info()    # 输出: Tom's grade is 8
    

    优点:

  • 适合那些属性值可以有默认值的场景,不需要在创建对象时传入。
  • 代码简洁,尤其是在属性固定的情况下更方便。
  • 解释:创建对象时不传入任何参数,而是在创建对象后通过 s1.names1.grade 手动设置属性值。这种方法灵活,但需要多写一步手动赋值。

    方法二:定义方法来设置属性值
    另一种做法是定义一个自定义方法来设置属性值,这样可以在创建对象后直接调用该方法来赋值。

    class Student:
        def __init__(self):
            self.name = None
            self.grade = None
    
        def set_info(self, name, grade):
            self.name = name
            self.grade = grade
    
        def print_info(self):
            print(f"{self.name}'s grade is {self.grade}")
    
    # 创建对象并设置属性
    s1 = Student()
    s1.set_info("Tom", 8)  # 使用自定义方法赋值
    s1.print_info()         # 输出: Tom's grade is 8
    

    解释:这里我们定义了 set_info 方法,可以方便地在对象创建后直接调用 s1.set_info("Tom", 8) 来设置属性。这样看起来更简洁,不需要手动逐一赋值属性。

    总结

    无参数的 __init__ 方法在创建对象时无法直接传参,但可以在创建对象后:

    1. 手动赋值属性。
    2. 使用自定义方法来集中设置属性。

    这两种方法都可以实现对属性的赋值,具体选择取决于代码的设计需求。

  • 带参数的 __init__ 方法

  • 带参数的 __init__ 方法允许在创建对象时传入参数,对属性进行初始化。这在属性值不确定或希望在创建时自定义属性值时非常有用。
     

    class Student:
        def __init__(self, name, grade):
            self.name = name    # 传入的参数用于初始化属性
            self.grade = grade
    
        def print_info(self):
            print(f"{self.name}'s grade is {self.grade}")
    
    # 使用带参数的__init__方法创建对象
    s1 = Student("Tom", 8)  # 创建时传入name和grade
    s2 = Student("Jerry", 7)
    
    s1.print_info()  # 输出: Tom's grade is 8
    s2.print_info()  # 输出: Jerry's grade is 7
    

    解释:

  • __init__ 方法接收 namegrade 两个参数,用于创建对象时初始化属性。
  • 通过传入不同的参数,可以方便地创建带有不同初始值的对象。
  • 更灵活,可以在创建对象时动态指定属性值。
  • 避免了在创建对象后单独设置属性的步骤,使代码更简洁。
     

    带默认值的参数 __init__ 方法

    可以在 __init__ 方法中为参数指定默认值,这样创建对象时参数是可选的,可以传入值覆盖默认值,也可以省略参数使用默认值。
     

    class Student:
        def __init__(self, name="Unknown", grade=0):
            self.name = name
            self.grade = grade
    
        def print_info(self):
            print(f"{self.name}'s grade is {self.grade}")
    
    # 创建对象时可以传入参数,也可以省略参数
    s1 = Student()             # 使用默认值
    s2 = Student("Alice", 10)  # 使用自定义值
    
    s1.print_info()  # 输出: Unknown's grade is 0
    s2.print_info()  # 输出: Alice's grade is 10
    

    解释:

  • 这里的 __init__ 方法使用了带有默认值的参数 name="Unknown"grade=0
  • 如果创建对象时未传入参数,namegrade 将使用默认值;如果传入了参数,属性将使用传入的值。
  • 提供灵活性,允许调用时不传参数的情况下使用默认值,但也可以根据需要自定义值。
     

    总结

  • 无参数的 __init__ 方法:适合简单情况,属性固定时使用默认值。
  • 带参数的 __init__ 方法:适合需要灵活初始化对象属性的情况,可以直接在创建时传入属性值。
  • 带默认值的参数 __init__ 方法:提供了额外灵活性,允许使用默认值,也可以在需要时自定义值。
  • 作者:Canliays

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python学习日记——def __init__( ):函数

    发表回复