Python 中的构造函数

pythonserver side programmingprogramming

在 Python 中,每个类都有一个构造函数,它是类内部指定的特殊方法。构造函数/初始化程序将在为类创建新对象时自动调用。初始化对象时,构造函数将值分配给类内的数据成员。

没有必要明确定义构造函数。但要创建构造函数,我们需要遵循以下规则 -

  • 对于一个类,它只允许一个构造函数。

  • 构造函数名称必须是 __init__。

  • 必须使用实例属性定义构造函数(只需将 self 关键字指定为第一个参数)。

  • 它不能返回任何值,除了 None。

语法

class A(): 
   def __init__(self):
      pass

示例

考虑下面的例子并了解构造函数的工作原理。

class SampleClass():
  def __init__(self):
    print("it a sample class constructor")

# 创建类的对象
A = SampleClass()

输出

it a sample class constructor

在上面的代码块中,为 SampleClass() 创建了对象 A,并且对于此实例,会自动执行方法 __init__(self)。这样它就显示了构造函数中的语句。

构造函数有三种类型。

  • 默认构造函数

  • 参数化构造函数

  • 非参数化构造函数

默认构造函数

默认构造函数不是由用户定义的,Python 本身会在程序编译期间创建一个构造函数。它不执行任何任务,但会初始化对象。

示例

Python 生成一个空的构造函数,其中没有代码。请参阅下面的示例。

class A():
    check_value = 1000
    # a method
    def value(self):
        print(self.check_value)

# 创建类的对象
obj = A()

# 使用对象调用实例方法
obj.value()

输出

1000

让我们使用 python 内置的 dir() 函数验证类 A 的构造函数。

dir(A)
Output:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', '__weakref__', 'check_value', 'value']

python dir() 函数返回指定对象的所有属性和方法的列表。在上面的列表中,我们可以看到为对象 A 创建了默认构造函数 __init__。

参数化构造函数

参数化构造函数,除了自身之外,还接受一个或多个参数。当您想要创建一个具有自定义属性值的对象时,它很有用。参数化构造函数允许我们在创建对象时指定对象属性的值。

示例

让我们看一个具有参数化构造函数的类的示例

class Family:
   members = 10
   def __init__(self, count):
      self.members = count
   
   def disply(self):
      print("Number of members is", self.members)  

joy_family = Family(25)
joy_family.disply()

输出

Number of members is 25

这里创建的对象 joy family 不是使用默认的 members 属性值 10,而是使用自定义值 25。此值可用于此实例,因为它已分配给 self.members 属性。

非参数化构造函数

非参数化构造函数不接受除 self 之外的任何参数。当您想要操纵实例属性的值时,它很有用。

示例

让我们看一个非参数化构造函数的示例。

class Player:
   def __init__(self):
      self.position = 0
   
   # 添加带有 steps 参数的 move() 方法
   def move(self, steps):
      self.position = steps
      print(self.position)
   
   def result(self):
      print(self.position)

player1 = Player()
print('player1 results')
player1.move(2)
player1.result()

print('p2 results')
p2 = Player()
p2.result()

输出

player1 results
2
2
p2 results
0

player1对象使用move()方法操作其position属性,p2对象访问position属性的默认值。


相关文章