- Python爬虫、数据分析与可视化:工具详解与案例实战
- 成立明 胡书敏 黄勇
- 840字
- 2021-03-31 12:07:46
3.2.1 创建类并在类里封装属性和方法
在Python语法里,通过class来创建新类,在定义好类名之后以冒号结尾。类的主要功能是封装,所以在其中可以封装相关的属性和方法。在如下的CarClassDemo.py案例中,我们将演示创建和使用类的做法。
01 # coding=utf-8 02 class Car: 03 # 定义属性 04 price = 0 05 owner = '' 06 # 私有属性,是否保险 07 __Insured = False 08 # 构造方法,这是一个魔术方法 09 def __init__(self, price, owner): 10 self.price = price 11 self.owner = owner 12 # 输出信息的方法 13 def printInfo(self): 14 print('Owner is:' + self.owner) 15 print('price is:' + str(self.price)) 16 # 实例化类并使用 17 myCar = Car(250000,'Peter') 18 # Owner is:Peter 19 # price is:250000 20 myCar.printInfo() 21 print(myCar.owner) # Peter 22 # print(myCar.__Insured) # error
从第2行到第15行,我们通过class关键字定义了一个名为Car的类。在第4行和第5行里,定义了Car里的价格(price)和拥有者(owner)这两个公有属性。在第7行里,通过__前缀定义了“是否保险”的私有属性。在第9行里,我们定义了名为__init__的构造函数。这是一个魔术方法,具体来讲,当创建类时,这个方法会自动执行,并且我们用入参给类里的两个属性进行了赋值。在第13行里,我们定义了Car类里的printInfo方法,输出了Car的两个属性。
在第17行里,我们实例化了Car类,并把实例化后的结果赋给了myCar对象。在第20行里,通过myCar调用了printInfo方法(第18行和第19行的注释里给出了打印结果)。而在第21行里,我们通过myCar对象输出了owner值。由于__Insured属性是私有的,因此无法通过myCar对象输出,也就是说第22行的代码会报错。
下面我们来归纳一下关于类和对象的使用要点:
第一,务必理解类和实例对象的差别。以本代码为例,汽车类是一个抽象的类,而属于Peter的汽车是一个实例对象。再具体点,只有调用实例的方法才有意义,比如通过调用printInfo方法输出Peter的汽车这个实例的信息才有用,而输出汽车类的printInfo方法毫无意义,因为汽车类是一个抽象的概念。
第二,在使用过程中,一般会如第17行那样初始化类的实例,同时会在__init__这个魔术方法里定义初始化类时的动作,因为该方法会在实例化类时被调用。
第三,在类里可以定义公有、私有的属性和方法,公有属性和公有方法能被实例化对象使用,而私有方法和私有属性不能。
第四,在类里会用self参数来表示实例,以此使用类里的属性或方法,比如在第14行就是通过self.owner来使用owner属性的。