《Python编程从入门到实践》第九章_类

 《Python编程从入门到实践》_第九章_类

class Pizza():
    """一次模拟小狗的尝试"""
    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 = Pizza('atom',3)
print("My dog's name is "+ my_dog.name.title() + ". ")
print("My dog's age is " + str(my_dog.age) + " years old! ")
print("创建多个实例")
class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name.title() + " now is sitting.")
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")
my_dog = Dog('tom', 3)
your_dog = Dog('Mei', 2)
print("My dog name is " + my_dog.name.title())
print("Your dog name is " + your_dog.name.title())
print("9.2使用类和实例")
class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self, make, model, year):
        """汽车的初始化"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 100 # 给属性指定默认值
    def get_desci_name(self):
        """描述汽车"""
        long_name = str(self.year) + ' ' + self.model + ' ' + self.make
        return long_name
    def read_odometer(self):
        """打印一条指出汽车里程的消息"""
        print("This car has " + str(self.odometer_reading) + " miles on it ")
    # 通过方法修改属性的值
    def updata_odometer(self, mileage):
        """将里程表读数设置为指定的值"""
        # self.odometer_reading = 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
my_car = Car('audi', 'a4', 2017)
print(my_car.model)
print(my_car.get_desci_name())
my_new_car = Car('audi', 'a4', 2016)
my_new_car.read_odometer()
print("9.2.3直接修改属性的值")
print(my_new_car.get_desci_name())
my_new_car.year = 2017
print(my_new_car.get_desci_name())
my_new_car.read_odometer()
# 修改属性的值
my_new_car.odometer_reading = 23 # 已经把里面属性值修改为23
my_new_car.read_odometer()


print("9.2.3通过方法修改")
my_new_car.updata_odometer(10)
print(my_new_car.get_desci_name())
my_new_car.read_odometer()

my_new_car.updata_odometer(120)
print(my_new_car.get_desci_name())
my_new_car.read_odometer()

print("通过方法对属性的值进行递增")

my_used_car = Car('sudo', 'outback', 2013)
print(my_used_car.get_desci_name())
my_used_car.updata_odometer(23500)
my_used_car.read_odometer()

my_used_car.increment_odometer(100)
my_used_car.read_odometer()
######################################################################################
C:\Anaconda3\python.exe H:/python/venv/pizza.py
My dog's name is Atom. 
My dog's age is 3 years old! 
创建多个实例
My dog name is Tom
Your dog name is Mei
9.2使用类和实例
a4
2017 a4 audi
This car has 100 miles on it 
9.2.3直接修改属性的值
2016 a4 audi
2017 a4 audi
This car has 100 miles on it 
This car has 23 miles on it 
9.2.3通过方法修改
You can't roll back an odometer
2017 a4 audi
This car has 23 miles on it 
2017 a4 audi
This car has 120 miles on it 
通过方法对属性的值进行递增
2013 outback sudo
This car has 23500 miles on it 
This car has 23600 miles on it 

Process finished with exit code 0
####################################################################################
print("9.3继承")
class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self, make, model, year):
        """汽车的初始化"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 100
    def get_descri_name(self):
        """描述汽车"""
        long_name = str(self.year) + ' ' + self.model + ' ' + self.make
        return long_name
    def update(self, mile):
        """更新里程值"""
        if mile > self.odometer_reading:
            self.odometer_reading = mile
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,mile):
        """增加里程"""
        self.odometer_reading += mile
    def read_odometer(self):
        """打印汽车的里程"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")
# 创建子类 父类必须包含在当前文件中 且位于子类前面
class ElectricCar(Car):
    """电动汽车的独特特性"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        # super()是一个特殊函数 帮助python将父类与子类关联起来
        super().__init__(make, model, year)
class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self, make, model, year):
        """汽车的初始化"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 100
    def get_descri_name(self):
        """描述汽车"""
        long_name = str(self.year) + ' ' + self.model + ' ' + self.make
        return long_name
    def update(self, mile):
        """更新里程值"""
        if mile > self.odometer_reading:
            self.odometer_reading = mile
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,mile):
        """增加里程"""
        self.odometer_reading += mile
    def read_odometer(self):
        """打印汽车的里程"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")
    def fill_gas_tank(self):
        print("haha")
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.")
    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270
        message = "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()
    # 重写父类的方法
    def fill_gas_tank(self):
        print("This car doesn't need a gas tank! ")
my_tesla = ElectricCar('tesla', 'model s', '2016')
print(my_tesla.get_descri_name())
my_tesla.fill_gas_tank()
my_tesla.battery.describe_battery()
# 将实例用作属性
my_tesla.battery.get_range()
####################################################################################
C:\Anaconda3\python.exe H:/python/venv/pizza.py
9.3继承
2016 model s tesla
This car doesn't need a gas tank! 
This car has a 70-kwh battery.
This car can go approximately 240 miles on a full charge!

Process finished with exit code 0
######################################################################################
car.py:
class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self, make, model, year):
        """汽车的初始化"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 100
    def get_descri_name(self):
        """描述汽车"""
        long_name = str(self.year) + ' '+ self.make + ' '+ self.model
        return long_name.title()
    def update(self, mile):
        """更新里程值"""
        if mile > self.odometer_reading:
            self.odometer_reading = mile
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self, mile):
        """增加里程"""
        self.odometer_reading += mile
    def read_odometer(self):
        """打印汽车的里程"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")

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.")
    def get_range(self):
        """打印一条描述电瓶续航里程的消息"""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270
        message = "This car can go approximate " + 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 Car
from car import Car, Battery, ElectricCar
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descri_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

print("9.4.2一个模块中可以存储多个类,所以可以一次导入多个类")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

print("9.3.4 从一个模块中导入多个类")
my_beetle = Car('volkswagen', 'beetle', 2015)
print(my_beetle.get_descri_name())

my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descri_name())
######################################################################################
C:\Anaconda3\python.exe H:/python/venv/pizza.py
2016 Audi A4
This car has 23 miles on it.
9.4.2一个模块中可以存储多个类,所以可以一次导入多个类
2016 Tesla Model S
This car has a 70-kwh battery.
This car can go approximate 240 miles on a full charge. 
9.3.4 从一个模块中导入多个类
2015 Volkswagen Beetle
2016 Tesla Roadster

Process finished with exit code 0
#####################################################################################
print("9.4.4导入整个模块")
import car
# 导入整个模块的时候,需要使用句点表示法访问需要的类
# 使用语法module_name.class_name
my_beetle = car.Car('vvv', 'tt', 2015)
print(my_beetle.get_descri_name())

my_tesla = car.ElectricCar('dd', 'aa', 2016)
print(my_tesla.get_descri_name())
###############################################################################
C:\Anaconda3\python.exe H:/python/venv/pizza.py
9.4.4导入整个模块
2015 Vvv Tt
2016 Dd Aa

Process finished with exit code 0
############################################################################
print("9.4.5导入模块中的类")
from car import *  # 导入所有的类

在一个模块中导入另一个模块

car.py:
class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self, make, model, year):
        """汽车的初始化"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 100
    def get_descri_name(self):
        """描述汽车"""
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()
    def update(self, mile):
        """更新里程值"""
        if mile > self.odometer_reading:
            self.odometer_reading = mile
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self, mile):
        """增加里程"""
        self.odometer_reading += mile
    def read_odometer(self):
        """打印汽车的里程"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")
#########################################################################################
ElectricCar.py:
from car import Car

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.")
    def get_range(self):
        """打印一条描述电瓶续航里程的消息"""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270
        message = "This car can go approximate " + 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 Car
from electric_car import ElectricCar

my_beetle = Car('aa', 'bb', 2016)
print(my_beetle.get_descri_name())

my_tesla = ElectricCar('dd', 'aa', 2016)
print(my_tesla.get_descri_name())
##################################################################################
C:\Anaconda3\python.exe H:/python/venv/pizza.py
2016 Aa Bb
2016 Dd Aa

Process finished with exit code 0
####################################################################################
# favorite_language.py
from collections import OrderedDict

favorite_language = OrderedDict()

favorite_language['a'] = 'python'
favorite_language['b'] = 'c'
favorite_language['c'] = 'ruby'
favorite_language['d'] = 'python'
# 创建了OrderedDict类的一个实例 并将其存储到favorite_language中 注意这里没有用花括号 而是调用OrderedDict()来创建一个空的有序字典
# 优点:兼具列表和字典的主要优点
for name, language in favorite_language.items():
    print(name.title() + " 's favorite language is " + language.title() + ". ")
#######################################################################################
C:\Anaconda3\python.exe H:/python/venv/pizza.py
A 's favorite language is Python. 
B 's favorite language is C. 
C 's favorite language is Ruby. 
D 's favorite language is Python. 

Process finished with exit code 0
########################################################################################

猜你喜欢

转载自blog.csdn.net/weixin_40807247/article/details/82179510