python类的构造函数是什么

  • Post category:Python

Python 中的类构造函数是指通过类定义创建对象时,自动调用的一种函数。它可以通过特定的名称__init__在类成员函数中实现。构造函数主要用于对对象的基本属性进行初始化,并且在创建类实例时只会被调用一次。本文将详细介绍 Python 类构造函数的完整攻略。

1. 构造函数的定义

构造函数是在对象创建时自动调用的成员函数。在 Python 中,每个类定义中都必须包含一个构造函数,用于完成类的初始化。

构造函数的定义如下:

class MyClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

其中__init__(self, arg1, arg2)即为构造函数,其中:

  • self: 代表当前实例对象本身。类的实例化时,self参数指向一个实例化对象。在类的方法中,必须将self参数放在方法的首个参数位置,Python 解释器调用时会传入实例对象作为参数。
  • arg1arg2: 代表实例化对象时需要传入的参数,可以根据实际需求添加更多参数。

2. 构造函数的作用

构造函数是在创建实例对象时自动调用的函数,它的作用主要有以下三点:

  1. 初始化对象的属性:在构造函数中可以初始化对象的各个属性,比如:
class Student:
    def __init__(self, name, gender, age):
        self.name = name
        self.gender = gender
        self.age = age

stu1 = Student('Tom', 'male', 18)
print(stu1.name, stu1.gender, stu1.age)

其中,__init__函数会被自动调用,并且将namegenderage三个变量传入。在__init__函数内部,对self.nameself.genderself.age三个变量进行了初始化。这样用stu1.name等语句就可以获取对应的属性值。

  1. 对象的一些预处理: 对象在进行使用之前,需要进行一些预处理,比如初始化各种资源,打开数据库连接等。
class Database:
    def __init__(self):
        self.host = 'localhost'
        self.user = 'root'
        self.password = '123456'
        self.dbname = 'test'
        self.conn = None
        self.cursor = None

    def connect(self):
        self.conn = MySQLdb.connect(host=self.host, user=self.user, password=self.password, 
                                    database=self.dbname, charset='utf8', use_unicode=True)

    def close(self):
        self.conn.close()

    def query(self, sql):
        try:
            self.cursor = self.conn.cursor()
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            return result
        except Exception as e:
            print(e)
        finally:
            if self.cursor:
                self.cursor.close()

db = Database()
db.connect()
result = db.query('SELECT version()')
print(result)

在这个例子中,构造函数__init__初始化了一个 MySQL 数据库连接的实例db,在调用db.connect方法时会自动进行连接数据库的操作,避免了重复调用的冗余操作。

  1. 防止类的属性被不安全的对象污染:构造函数可以帮助我们创建可控且安全的类对象,并防止类的属性被不安全的对象污染。如果没有构造函数,那么在类里面将存在不安全的对象和数据。

3. 构造函数的实例

下面通过两个实例来说明 Python 中的构造函数。

  1. 基本属性初始化
class Fruit:
    def __init__(self, name, color, price):
        self.name = name
        self.color = color
        self.price = price

apple = Fruit('apple', 'red', 5.5)
print('name:{}, color:{}, price:{}'.format(apple.name, apple.color, apple.price))

其中,__init__函数完成了对属性namecolorprice的初始化,然后在实例化对象apple中通过构造函数传入相应的参数,最后打印输出结果。

  1. 预处理操作
import requests

class Weather:
    def __init__(self, city):
        self.city = city
        self.url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + city
        self.data = None

    def get_data(self):
        '''获取数据'''
        response = requests.get(self.url)
        data = response.json()
        self.data = data['data']

    def get_temperature(self):
        '''获取温度'''
        temperature = self.data['wendu']
        return temperature

    def get_forecast(self):
        '''获取预报'''
        forecast = self.data['forecast']
        return forecast

city = '上海'
weather = Weather(city)
weather.get_data()
temperature = weather.get_temperature()
forecast = weather.get_forecast()
print('{},当前温度:{}℃'.format(city, temperature))
for f in forecast:
    print(f['date'], f['type'], f['high'], f['low'])

在这个例子中,构造函数__init__初始化了用于请求天气数据的 URL 地址和城市名,并通过请求获取了该城市的天气数据。在创建对象weather时,传入了city=上海,然后调用类对象的get_data()方法和get_temperature()方法和get_forecast()方法来获取温度和天气预报信息。

通过上面这两个例子,可以清楚地了解 Python 中构造函数的基本用法,以及在实际开发中的应用。