使用类的三步骤
- Step 1. 定义类
类是对象的蓝图和模板 有了类就可以创建对象
定义类需要做的两件事情:数据抽象和行为抽象
数据抽象 - 抽取对象共同的静态特征(找名词) - 属性
行为抽象 - 抽取对象共同的动态特征(找动词) - 方法
定义类的关键字 - class - 类名(每个单词的首字母大写)
- Step 2. 调用构造方法创建学生对象
实际上调用的是Student类中init方法
- Step 3. 给对象发出消息
通过给对象发消息让对象完成某些工作就
解决任何的问题都是通过让对象去做事情
修改属性的值
- 通过直接访问属性进行修改
- 通过方法修改属性的值 - 传参
- 通过方法对属性的值进行递增
练习:计算长方形的周长和面积
class Rect:
def __init__(self, lenght, width):
self.lenght = lenght
self.width = width
def area(self):
return self.lenght * self.width
def week_lenght(self):
return (self.lenght + self.width) * 2
def mian():
ret1 = Rect(26, 20)
print(ret1.area())
print(ret1.week_lenght())
if __name__ == '__main__':
main()
练习:时钟显示
from time import sleep
class Clock:
def __init__(self, hour, minute, second):
self.hour = hour
self.minute = minute
self.second = second
def display(self):
while True:
print('目前的时间是:%d:%d:%d' % (self.hour, self.minute, self.second))
self.second += 1
if self.second == 60:
self.minute += 1
if self.minute == 60:
self.hour += 1
self.hour %= 60
self.minute %= 60
self.second %= 60
sleep(1)
def main():
clock1 = Clock(0, 0, 0)
clock1.display()
if __name__ == '__main__':
main()
继承
编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类 ,而新类称为子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
重写类方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
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.")
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 get_range(self):
"""打印一条消息,指出电瓶的续航里程"""
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
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() 是一个特殊函数,帮助Python将父类和子类关联起来
super().__init__(make, model, year)
self.battery_size = 70
self.battery = Battery()
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
if __name__ == '__main__':
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
导入类
随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,Python允许你将类存储在模块中,然后在主程序中导入所需的模块。
#将上面的类导入另一个程序中
from car import ElectricCar
#可以导入多个类
from car import Car, ElectricCar
#导入模块中的所有类
from module_name import *
#导入整个模块
from car