发布于2019-08-06 10:28 阅读(889) 评论(0) 点赞(2) 收藏(1)
第九章 类(学习总结)
一、创建类及调用方法
二、Python2.7中创建类
三、修改属性的值:
1、直接通过实例进行修改
2、通过方法进行设置
3、通过刚发进行递增(增加特定的值)
四、继承以及Python 2.7中的继承
五、给子类定义属性和方法
六、重写父类的方法,子类中的方法名与父类相同
七、将实例用作属性
八、导入单个类
九、在一个模块中存储多个类
十、从一个模块中导入多个类,用逗号分隔
十一、导入整个模块,访问方式是module_name.class_name格式(推荐使用)
十二、导入模块中的所有类;不推荐使用,未明确指出哪些类;有同名冲突
十三、在一个模块中导入另一个模块(有依赖)
十四、Python标准库是一组模块,安装Python都包含它
十五、类编码风格
##################################
#一、创建类及调用方法
‘’‘创建和使用类,定义类,首字母大写’’’
class Dog():
def __init__(self,name,age):
#init,类中的函数称为方法,self必不可少,且位于前面;每个与类相关联的方法调用都自动传递实参self
#初始化属性name和age,获取存储在形参name和age中的值,并存储在变量name中,该变量被关联到当前创建的实例
self.name = name
self.age = age
# 不需要额外的信息,所以只有一个形参self
def sit(self):
print(self.name.title() + "is now sitting.")
def roll_over(self):
print(self.name.title() + "is now roll_over.")
#根据类创建实例
my_dog = Dog('willie',6)
#访问实例的属性,使用句点表示法
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog's age is " + str(my_dog.age) + ".")
#1、调用方法,创建实例后可调用类中定义的任何方法
my_dog.sit()
my_dog.roll_over()
#输出结果
My dog's name is Willie.
My dog's age is 6.
Willieis now sitting.
Willieis now roll_over.
######################
#Python2.7中创建类
#格式:class ClassName(object):
class Dog(object):
###################################
#二、根据类创建多个实例
class Dog():
def __init__(self,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() + " is now roll_over.")
#根据类创建2个实例
my_dog = Dog('willie',6)
your_dog = Dog('lucy',3)
#访问实例的属性,使用句点表示法
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog's age is " + str(my_dog.age) + " years old.")
#调用方法
my_dog.sit()
my_dog.roll_over()
print("\nyour dog's name is " + your_dog.name.title() + ".")
print("your dog's age is " + str(your_dog.age) + " years old.")
#调用方法
your_dog.sit()
your_dog.roll_over()
#输出结果
My dog's name is Willie.
My dog's age is 6 years old.
Willie is now sitting.
Willie is now roll_over.
your dog's name is Lucy.
your dog's age is 3 years old.
Lucy is now sitting.
Lucy is now roll_over.
###################################
#三、修改属性的值:
#1、直接通过实例进行修改
#2、通过方法进行设置
#3、通过刚发进行递增(增加特定的值)
#1、直接通过实例进行修改
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
#初始值设置为0
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.odometer_reading = 23
my_new_car.read_odometer()
#输出结果
2016 Audi A4
This car has 23 miles on it.
#2、通过方法进行设置
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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! ")
my_new_car = Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())
#通过方法进行设置
my_new_car.update_odometer(13)
my_new_car.read_odometer()
#输出结果
2016 Audi A4
This car has 13 miles on it.
#3、通过刚发进行递增(增加特定的值)
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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! ")
#新增方法接受一个单位为英里的数字并加入到self.odometer_reading
def increment_odometer(self,miles):
self.odometer_reading += miles
my_used_car = Car('subaru','outback','2013')
print(my_used_car.get_descriptive_name())
my_used_car.update_odometer(2300)
my_used_car.read_odometer()
my_used_car.increment_odometer(123)
my_used_car.read_odometer()
#输出结果
2013 Subaru Outback
This car has 2300 miles on it.
This car has 2423 miles on it.
#################
#四、继承
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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 ElectricCar(Car):
def __init__(self,make,model,year):
"""初始化父类(superclass)的属性"""
super().__init__(make,model,year)
my_tesla = ElectricCar('tesla','models','2016')
print(my_tesla.get_descriptive_name())
#输出结果
2016 Tesla Models
#################
#Python 2.7中的继承
#使用继承时父类要指定object
class Car(object):
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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 ElectricCar(Car):
def __init__(self,make,model,year):
"""函数super需要子类名 和 self两个参数"""
super(ElectricCar, self).__init__(make,model,year)
my_tesla = ElectricCar('tesla','models','2016')
print(my_tesla.get_descriptive_name())
#输出结果
2016 Tesla Models
#################
##五、给子类定义属性和方法
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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 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','models','2016')
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
#输出结果
2016 Tesla Models
This car has a 70-kWh battery.
#################
#六、重写父类的方法,子类中的方法名与父类相同
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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
def fill_gas_tank(self):
print("This car needs a gas tank!")
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.")
#跟父类中的方法同名,进行重写
def fill_gas_tank(self):
print("This car doesn't need a gas tank!")
my_tesla = ElectricCar('tesla','models','2016')
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
#输出结果
2016 Tesla Models
This car has a 70-kWh battery.
This car doesn't need a gas tank!
#################
##七、将实例用作属性
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 10
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 ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
#将Battery实例用作ElectricCar类的一个属性
self.battery = Battery()
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
#将属性和方法提取出来放到一个新类中
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 cat can go approximately " + str(range)
message += " miles on a full charge."
print(message)
my_tesla = ElectricCar('tesla','models','2016')
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
#输出结果
2016 Tesla Models
This car has a 70-kWh battery.
This cat can go approximately 240 miles on a full charge.
#################
#八、导入单个类
#1、创建一个只包含Car类的模块,文件名命名为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
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
#2、创建另一个文件my_car.py文件,导入Car类并创建实例
#打开car.py文件并导入Car类
from car import Car
my_new_car = Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
#输出结果
2016 audi a4
This car has 23 miles on it.
#################
#九、在一个模块中存储多个类
#1.创建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
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.")
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()
#2.创建一个my_electric_car.py文件导入ElectricCar类
from car import ElectricCar
my_tesla = ElectricCar('tesla','models','2016')
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
#输出结果
2016 tesla models
This car has a 70 kWh battery.
This car can go approximately 240 miles on a full charge.
#################
#十、从一个模块中导入多个类,用逗号分隔
#1.创建car.py模块存储多个类(同上)
#2.创建my_car.py文件导入多个类
#导入Car和ElectricCar类
from car import Car,ElectricCar
my_beetle = Car('volkswagen','beetle','2016')
print(my_beetle.get_descriptive_name().title())
my_tesla = ElectricCar('tesla','roadster','2016')
print(my_tesla.get_descriptive_name().title())
#输出结果
2016 Volkswagen Beetle
2016 Tesla Roadster
#################
#十一、导入整个模块,访问方式是module_name.class_name格式(推荐使用)
#1.创建car.py模块存储多个类(同上)
#2.创建my_car.py文件导入整个模块
import car
my_beetle = car.Car('volkswagen','beetle','2016')
print(my_beetle.get_descriptive_name().title())
my_tesla = car.ElectricCar('tesla','roadster','2016')
print(my_tesla.get_descriptive_name().title())
#输出结果
2016 Volkswagen Beetle
2016 Tesla Roadster
#################
#十二、导入模块中的所有类;不推荐使用,未明确指出哪些类;有同名冲突
#1.创建car.py模块存储多个类(同上)
#2.创建my_car.py文件导入模块中的所有类
from car import *
my_beetle = Car('volkswagen','beetle','2016')
print(my_beetle.get_descriptive_name().title())
my_tesla = ElectricCar('tesla','roadster','2016')
print(my_tesla.get_descriptive_name().title())
#输出结果
2016 Volkswagen Beetle
2016 Tesla Roadster
#################
#十三、在一个模块中导入另一个模块(有依赖)
#1.创建car.py模块存储Car类
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
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
#2.创建electric_car.py模块存储Battery和ElectricCar
#导入car模块
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 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()
#3.从不同模块导入类
from car import Car
from electric_car import ElectricCar
my_beetle = Car('volkswagen','beetle','2016')
print(my_beetle.get_descriptive_name().title())
my_tesla = ElectricCar('tesla','roadster','2016')
print(my_tesla.get_descriptive_name().title())
#输出结果
2016 Volkswagen Beetle
2016 Tesla Roadster
#################
#十四、Python标准库是一组模块,安装Python都包含它
#导入标准库的模块,可使用其中的函数和类
from collections import OrderedDict
#调用OrderedDict 来常见空的字典并存储值
favorite_languages = OrderedDict()
favorite_languages['jen'] = 'python'
favorite_languages['tom'] = 'c'
favorite_languages['lily'] = 'java'
favorite_languages['lihua'] = 'python'
for name,language in favorite_languages.items():
print(name.title()+ "'s favorite language is " + language.title() + ".")
#输出结果
Jen's favorite language is Python.
Tom's favorite language is C.
Lily's favorite language is Java.
Lihua's favorite language is Python.
#################
#十五、类编码风格
#1.类名应采用 驼峰命名法,不使用下划线
#2.实例名和模块名都采用小写格式,加下划线
#3.定义类后添加一个文档字符串
#4.类中使用一个空行来分隔方法;模块中使用两个空行来分隔类
#5.导入模块时应先导入标准库模块的import语句,再添加一个空行,导入自己编写的模块
Python编程从入门到实践基础知识:https://blog.csdn.net/louzhu_lz/article/details/90721685
Python编程从入门到实践(第三、四章的列表和元祖):https://blog.csdn.net/louzhu_lz/article/details/91354506
Python编程从入门到实践(第五章if语句学习总结):https://blog.csdn.net/louzhu_lz/article/details/91409903
Python编程从入门到实践(第六章字典学习总结):https://blog.csdn.net/louzhu_lz/article/details/91910554
Python编程从入门到实践(第七章用户输入和while循环学习总结):https://blog.csdn.net/louzhu_lz/article/details/92384649
Python编程从入门到实践(第八章函数)学习总结:https://blog.csdn.net/louzhu_lz/article/details/93377817
作者:紫薇
链接:https://www.pythonheidong.com/blog/article/7688/bb27031a3b54499931ef/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!