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 解释器调用时会传入实例对象作为参数。arg1
、arg2
: 代表实例化对象时需要传入的参数,可以根据实际需求添加更多参数。
2. 构造函数的作用
构造函数是在创建实例对象时自动调用的函数,它的作用主要有以下三点:
- 初始化对象的属性:在构造函数中可以初始化对象的各个属性,比如:
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__
函数会被自动调用,并且将name
、gender
、age
三个变量传入。在__init__
函数内部,对self.name
、self.gender
、self.age
三个变量进行了初始化。这样用stu1.name
等语句就可以获取对应的属性值。
- 对象的一些预处理: 对象在进行使用之前,需要进行一些预处理,比如初始化各种资源,打开数据库连接等。
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
方法时会自动进行连接数据库的操作,避免了重复调用的冗余操作。
- 防止类的属性被不安全的对象污染:构造函数可以帮助我们创建可控且安全的类对象,并防止类的属性被不安全的对象污染。如果没有构造函数,那么在类里面将存在不安全的对象和数据。
3. 构造函数的实例
下面通过两个实例来说明 Python 中的构造函数。
- 基本属性初始化
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__
函数完成了对属性name
、color
、price
的初始化,然后在实例化对象apple
中通过构造函数传入相应的参数,最后打印输出结果。
- 预处理操作
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 中构造函数的基本用法,以及在实际开发中的应用。