Python的魔法方法__init__()

首先了解什么是对象?

对象=属性+方法(函数)

举个例子:

class Bird(): 
    color = 'black'#特征的描述称为属性,其实就是变量
    def fly(self): #方法实际就是函数
        print("Flying")

以上定义了属性和方法,将定义的这些称为类(class)。我们需要使用类来创建真正的对象,这个对象就称为类的一个实例(instance),也叫实例对象(instance objects)。简单的说比如我们建一个个人博客,需要一台云主机,有了云主机才能搭建一个博客系统,这个云主机就是类。

a = Bird() #a就是实例对象

什么是魔法方法?

魔法方法左右总是被两个下划线包围,例如__init__()。

魔法方法是类在实例化成对象的时候首先会调用的一个方法

举个例子:

#example.py
class Example:
    def __init__(self):
        print ("__init__ method")

运行example.py,输出结果:

================= RESTART: F:\Software\Python3.9\py\example.py =================
>>> a = Example() #实例化对象的时候,直接调用了__init__()方法,运行了print语句。
__init__ method
>>> 

再举个例子:

#rectangle.py
class Rectangle:
    """
    定义一下矩形类
    需要长和宽两个参数
    分别定义计算周长和面积的方法
    (实际就是函数)
    我们需要对象在初始化的时候就拥有长和宽两个参数
    因此需要重写__init__()方法
    
    """
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def getPeri(self):
        return (self.x + self.y) * 2

    def getArea(self):
        return (self.x * self.y)

运行rectangle.py

================= RESTART: F:\Software\Python3.9\py\rectangle.py =================
#错误方法:
>>> a = Rectangle()
#由于实例化成对象的时候会调用__init__()方法,而__init__()方法需要传入x,y两个参数,所以程序抛出Error。
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    a = Rectangle()
TypeError: __init__() missing 2 required positional arguments: 'x' and 'y'
>>> 

#正确方法:
>>> a = Rectangle(5,6) #实例化一个对象
>>> a.getPeri() #对象的方法调用
22
>>> a.getArea()
30
>>> 

__init__()方法的返回值一定是None,只有在需要初始化的时候才重写。

>>> class Test:
	def __init__(self):
		return "abc"

>>> a = Test()
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    a = Test()
TypeError: __init__() should return None, not 'str'


「 文章如果对你有帮助,请点个赞哦^^ 」 

4+