# 在面向对象编程中,
# 你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
# 编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,
# 每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独
# 特的个性。
# 1 创建和使用类
# ,在Python中,首字母大写的名称指的是类。
class Dog():
"""模拟小狗的简单尝试"""
def __init__(self,name,age):##这里的下划线要敲两遍
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6) #方法__init__()并未显式地包含return语句,但Python自动返回一个表示这条小狗的实例。
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()
my_dog.roll_over()
your_dog = Dog('lucy', 3)
print("\nYour dog's name is " + your_dog.name.title() + ".")
print("Your dog is " + str(your_dog.age) + " years old.")
your_dog.sit()
#
# class Car():
# """一次模拟汽车的简单尝试"""
# 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 describe_battery(self):
# """打印一条描述电瓶容量的消息"""
# print("This car has a " + str(self.battery_size) + "-kWh battery.")
#导入
#import car
from car import Car,Battery
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
# 直接修改属性的值
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
#通过方法修改属性的值
my_new_car.update_odometer(26)
my_new_car.read_odometer()
my_new_car.increment_odometer(100)
my_new_car.read_odometer()
# 2 继承
class ElectricCar(Car):
"""电动汽车的独特之处"""
def __init__(self, make, model, year):
"""初始化父类的属性"""
super().__init__(make, model, year)
# super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用
# ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超
# 类(superclass),名称super因此而得名
"""初始化父类的属性,再初始化电动汽车特有的属性"""
self.battery_size = 70
self.battery = Battery()
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
print("")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
# 给子类定义属性和方法0
my_tesla.describe_battery()
print("")
# 将实例用作属性
my_tesla.battery.describe_battery()
# 3 python 标准库
print("")
from collections import OrderedDict
favorite_languages = OrderedDict()
favorite_languages['jen'] = 'python'
favorite_languages['sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python'
for name, language in favorite_languages.items():
print(name.title() + "'s favorite language is " +
language.title() + ".")
# 如何编写类;如何使用属性在类中存储信息,以及如何编写方法,以
# 让类具备所需的行为;如何编写方法__init__(),以便根据类创建包含所需属性的实例。你见识
# 了如何修改实例的属性——包括直接修改以及通过方法进行修改。你还了解了:使用继承可简化
# 相关类的创建工作;将一个类的实例用作另一个类的属性可让类更简洁。
# 你了解到,通过将类存储在模块中,并在需要使用这些类的文件中导入它们,可让项目组织
# 有序。你学习了Python标准库,并见识了一个使用模块collections中的OrderedDict类的示例。
car.py
class Car():
"""一次模拟汽车的简单尝试"""
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 describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")