一.创建和使用类
1.创建Dog类
class Dog():"""一次模拟小狗的简单尝试"""def __init__(self, name, age):"""初始化属性name和age"""self.name = nameself.age = agedef sit(self):"""模拟小狗被命令时蹲下"""print(self.name.title() + " is now sitting.")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over!")
方法init()
方法init() 是一个特殊的方法,每当你根据Dog 类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。 方法init() 定义成了包含三个形参:self 、name 和age 。在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。以self 为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。
2.根据类创建实例
class Dog():--snip-my_dog = Dog('willie', 6)print("My dog's name is " + my_dog.name.title() + ".")print("My dog is " + str(my_dog.age) + " years old.")
1.访问属性
my_dog.name
2.调用方法
class Dog():--snip-my_dog = Dog('willie', 6)my_dog.sit()my_dog.roll_over()
3.创建多个实例
class Dog():--snip-my_dog = Dog('willie', 6)your_dog = Dog('lucy', 3)print("My dog's name is " + my_dog.name.title() + ".")print("My dog is " + str(my_dog.age) + " years old.")my_dog.sit()print("\nYour dog's name is " + your_dog.name.title() + ".")print("Your dog is " + str(your_dog.age) + " years old.")your_dog.sit()
二.使用类和实例
1.Car类
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yeardef get_descriptive_name(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()my_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())
2.给属性指定默认值
class Car():def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):--snip-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()
3.修改属性的值
1.直接修改属性的值
class Car():--snip-my_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())my_new_car.odometer_reading = 23my_new_car.read_odometer()
2.通过方法修改属性的值
class Car():--snip-def update_odometer(self, mileage):"""将里程表读数设置为指定的值"""self.odometer_reading = mileagemy_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())my_new_car.update_odometer(23)my_new_car.read_odometer()
3.通过方法对属性的值进行递增
class Car():--snip-def update_odometer(self, mileage):--snip-def increment_odometer(self, miles):"""将里程表读数增加指定的量"""self.odometer_reading += milesmy_used_car = Car('subaru', 'outback', 2013)print(my_used_car.get_descriptive_name())my_used_car.update_odometer(23500)my_used_car.read_odometer()my_used_car.increment_odometer(100)my_used_car.read_odometer()
三.继承
1.子类的方法init()
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn 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 = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):self.odometer_reading += milesclass ElectricCar(Car):"""电动汽车的独特之处"""def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)my_tesla = ElectricCar('tesla', 'model s', 2016)print(my_tesla.get_descriptive_name())
2.给子类定义属性和方法
class Car():--snip-class ElectricCar(Car):"""Represent aspects of a car, specific to electric vehicles."""def __init__(self, make, model, year):"""电动汽车的独特之处初始化父类的属性,再初始化电动汽车特有的属性"""super().__init__(make, model, year)self.battery_size = 70def 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()
3.重写父类的方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。
class ElectricCar(Car):--snip-def fill_gas_tank():"""电动汽车没有油箱"""print("This car doesn't need a gas tank!")
4.将实例用作属性
class Car():--snip-class Battery():"""一次模拟电动汽车电瓶的简单尝试"""def __init__(self, battery_size=70):"""初始化电瓶的属性"""self.battery_size = battery_sizedef 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 = Battery()my_tesla = ElectricCar('tesla', 'model s', 2016)print(my_tesla.get_descriptive_name())my_tesla.battery.describe_battery()
四.导入类
1.导入单个类
"""一个可用于表示汽车的类"""class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):"""返回整洁的描述性名称"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn 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 = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):"""将里程表读数增加指定的量"""self.odometer_reading += miles
from car import Carmy_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())my_new_car.odometer_reading = 23my_new_car.read_odometer()
2.在一个模块中存储多个类
"""一组用于表示燃油汽车和电动汽车的类"""class Car():--snip-class Battery():"""一次模拟电动汽车电瓶的简单尝试"""def __init__(self, battery_size=60):"""初始化电瓶的属性"""self.battery_size = battery_sizedef describe_battery(self):"""打印一条描述电瓶容量的消息"""print("This car has a " + str(self.battery_size) + "-kWh battery.")def get_range(self):"""打印一条描述电瓶续航里程的消息"""if self.battery_size == 70:range = 240elif self.battery_size == 85:range = 270message = "This car can go approximately " + str(range)message += " miles on a full charge."print(message)class ElectricCar(Car):"""模拟电动汽车的独特之处"""def __init__(self, make, model, year):"""初始化父类的属性,再初始化电动汽车特有的属性"""super().__init__(make, model, year)self.battery = Battery()
from car import ElectricCarmy_tesla = ElectricCar('tesla', 'model s', 2016)print(my_tesla.get_descriptive_name())my_tesla.battery.describe_battery()my_tesla.battery.get_range()
3.从一个模块中导入多个类
from car import Car, ElectricCarmy_beetle = Car('volkswagen', 'beetle', 2016)print(my_beetle.get_descriptive_name())my_tesla = ElectricCar('tesla', 'roadster', 2016)print(my_tesla.get_descriptive_name())
4.导入整个模块
import carmy_beetle = car.Car('volkswagen', 'beetle', 2016)print(my_beetle.get_descriptive_name())my_tesla = car.ElectricCar('tesla', 'roadster', 2016)print(my_tesla.get_descriptive_name())
5.导入模块中的所有类
from module_name import *
6.在一个模块中导入另一个模块
from car import Carclass Battery():--snip-class ElectricCar(Car):--snip-
"""一个可用于表示汽车的类"""class Car():--snip-
from car import Carfrom electric_car import ElectricCarmy_beetle = Car('volkswagen', 'beetle', 2016)print(my_beetle.get_descriptive_name())my_tesla = ElectricCar('tesla', 'roadster', 2016)print(my_tesla.get_descriptive_name())
