第九章-- 类

9.1 创建和使用类

9.1.1 创建 dog 类

创建一个Dog类
class Dog():
	"""一次模拟小狗的简单尝试"""
	_init_、self 一定要有,不可缺少
	def _init_(self, name, age):
		"""初始化属性name 和 age"""
		获取存储在形参name中的值并将其存储到变量name中,然后该变量被关联到当前创建的实例
		self.name = name
		self.age  = age
	
	def sit(self):
		"""模拟小狗被命令时蹲下"""
		print(self.name.title() + " is now sitting. ")

	def roll_over(self):
		"""模拟小狗被命令时打滚"""
		print(self.name.titile() + " rolled over! ")

9.1.2 根据类创建实例

创建一个Dog类
class Dog():
	"""一次模拟小狗的简单尝试"""
	__init__、self 一定要有,不可缺少
	def __init__(self, name, age):
		"""初始化属性name 和 age"""
		获取存储在形参name中的值并将其存储到变量name中,然后该变量被关联到当前创建的实例
		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')
my_dog.sit()
my_dog.roll_over()
调用类的成员 my_dog.name  /my_dog.age
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is "+ str(my_dog.age)+" years old .")
  • 结果为
    在这里插入图片描述
    1. 访问属性
      my_dog.name
    1. 调用方法
      my_dog.sit()
      my_dog.roll_over()
    1. 创建多个实例
      my_dog = Dog(‘willie’,6)
      your_dog = Dog(‘lucy’,3)

9.2 使用类和实例

9.2.1 Car类

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('dudi','a4',2016)
print(my_new_car.get_descriptive_name())


修改属性的值
my_new_car.odomtter_reading = 23
my_new_car.read_odometer()

9.2.2 给属性指定值

self.odometer_reading = 0

9.2.3 修改属性的值

    1. 直接修改属性的值
	my_new_car.odomtter_reading = 23
	my_new_car.read_odometer()
    1. 通过方法修改属性的值
"""当传入参数给类中的函数时,不同在__init___增加形参,在函数里给形参即可"""
class Car():
	def __init__(self, make, model, year):
	"""初始化描述汽车的属性"""
		self.make = make
		self.model= model
		self.year = year
	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.update_odometer(23)
my_new_car.read_odometer()
    1. 通过方法对属性的值进行递增
      自增`
	class Car():
		def increment_odometer(self, miles)
		"""将里程表读数增加指定的量"""
		self.odometer_reading += miles

my_use_car.update_odometer(23500)
23500
my_use_car.update_odometer(100)
23600

9.3 继承

9.3.1 子类的方法 init()

class  Car():
	"""一次模拟汽车的简单尝试"""
	def __init__(self, make, model, year):
		self.name = 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 ElectricCar(Car):
	"""电动汽车的独特之 处"""
	def __init__(self, make, model, year):
		"""初始化父类的属性"""
		"""super()是一个特殊的函数,帮助python将父类和子类关联起来"""
		"""这行代码让python调用ElectricCar的父类的方法
		__init__(),让ElectricCar实例包含父类的所有属性"""
		super().__init__(make, model, year)

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())

9.3.2 Python 2.7 中的继承

class Car(object):
	def __init__(self, make, year):
		--snip--
	
class ElectricCar(Car):
	def __init__(self, make, model, year):
		super(ElectricCar,self).__init__(make, model,year)
		--snip--

9.3.3 给子类定义属性和方法

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 = 70

	def 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()

9.3.4 重写父类的方法

"""
对电动汽车调用方法fill_gas_tank(),python 将忽略Car类中的
方法fill_gas_tank(),转而运行在子类定义的fill_gas_tank()代码

"""
class ElectricCar(Car):
	--snip--
	def fill_gas_tank(self):
	"""电动汽车没有油箱"""
	print("This car doesn't need a gas tank!") 

9.3.5 将实例用作属性

class Car():
	--snip--

class Battery():
	"""一次模拟电动汽车电瓶的简单尝试"""
	def __init__(self, battery_size=70):
		"""初始化电瓶的属性"""
		self.battery_size = battert_size

	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().__init__(self, make, model, year)
		self.battery = Battery()

my_tesla = ElectricCar('tesla','model s',2016)

print(my_tesla.get_descriptive_name())
"""使用ElectricCar类中属性battery,该属性属于Battery类,
在使用Battery类中方法 describe_battery """
my_tesla.battery.describe_battery()

9.3.6 模拟实物

9.4 导入类

9.4.1 导入单个类

  • 创建car.py 文件,在该文件编写好 Car类
  • 导入进my_car.py中
"""从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()

9.4.2 在一个模块中存储多个类

  • 创建car.py 文件,在该文件编写好 Car 、ElectricCar类
  • 导入进my_car.py中
  • car.py
class Car():
	--snip--
class ElectricCar(Car):
	--snip--
  • my_car.py

```python
"""从car.py文件中导入Car、ElectricCar类"""
from car import Car, ElectricCar

9.4.4 导入整个模块

import car
"""使用方法与函数导入块一致"""
my_beetle = car.Car('volkswagen', 'beetle', 2016)

9.4.5 导入模块中所有类

form module_name import *

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

  • electric_car.py
from car import Car
class Battery():
	--snip--
class ElectricCar(Car):
	--snip
  • car.py
class Car():
	--snip--
  • my_cars.py
from car import Car
from electric_car import ElectricCar

my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())

my_beetle = ElectricCar('tesla', 'roadster', 2016)
print(my_beetle.get_descriptive_name())

9.4.7 自定义工作流程

9.5 Python 标准库

9.6 类编码风格

  • 1.对于每个类,都应跟紧在类定义后面包含一个文档字符串
  • 2.使用空行来组织代码,但不可滥用
  • 3.在类中,使用一个空行来分隔方法
  • 4.在模块中,使用两个空行来分隔类
  • 5.在同时导入标准库模块和自定义模块时,应先导入标准库模块,再空一行,导入自定义模块

9.7 小结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值