Python学习笔记(八)
Aug 29, 2016
在类的
__init__()
方法中,self
形参必不可少还必须位于其他行参的前面:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24"""汽车类,存储有关汽车的信息.
author: geekwang
date: 2016/08/29
"""
class Car(object):
"""一次模拟汽车的简单尝试."""
def __init__(self, make, model, year):
"""初始化描述汽车的属性."""
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
"""返回整洁的描述性信息."""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
为类中的属性指定默认值
类中的每个属性都必须有初始值,有些情况下在方法
__init__()
中指定属性的初始值是可行的,无需包含为它提供初始值的行参:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29"""汽车类,存储有关汽车的信息.
author: geekwang
date: 2016/08/29
"""
class Car(object):
"""一次模拟汽车的简单尝试."""
def __init__(self, make, model, year):
"""初始化描述汽车的属性."""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整洁的描述性信息."""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
"""打印一条指出汽车里程的消息."""
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()创建子类时,父类必须包含在当前文件中,且位于子类的前面,子类必须在括号内指定父类的名称:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52"""汽车类,存储有关汽车的信息.
author: geekwang
date: 2016/08/29
"""
class Car(object):
"""一次模拟汽车的简单尝试."""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + " " + self.make + " " + self.model
return long_name
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car):
"""电动汽车的独特之处."""
def __init__(self, make, model, year):
"""电动汽车的独特之处.
初始化父类的属性,再初始化电动汽车特有的属性(电瓶容量)
"""
super().__init__(make, model, year)
self.battery_size = 70
def describe_battery(self):
"""打印一条描述电瓶容量的消息."""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()对于父类的方法,只要不符合子类模拟的实物的行为,都可以对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。
使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多,属性和方法清单以及文件都越来越长,在这种情况下,可能需要将类的一部分作为一个独立的类提取出来,可以将大型类拆分成多个协同工作的小类,将实例用作类的属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60"""汽车类,存储有关汽车的信息.
author: geekwang
date: 2016/08/29
"""
class Car(object):
"""一次模拟汽车的简单尝试."""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + " " + self.make + " " + self.model
return long_name
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class Battery():
"""一次模拟电动汽车电瓶的简单尝试."""
def __init__(self, battery_size=70):
"""初始化电瓶的属性."""
self.battery_size = battery_size
def describe_battery(self):
"""打印一条描述电瓶容量的消息."""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
class ElectricCar(Car):
"""电动汽车的独特之处."""
def __init__(self, make, model, year):
"""电动汽车的独特之处.
初始化父类的属性,再初始化电动汽车特有的属性(电瓶容量)
"""
super().__init__(make, model, year)
self.battery_size = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery_size.describe_battery()需要同时导入标准库中的模块和你编写的模块时,先编写导入标准模块的
import
语句,再添加一个空行,然后编写导入你自己编写的模块的import
语句