【Python学习记录——从入门到放弃】八、类(下)

  1. 给子类定义属性和方法
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	def increment_odometer(self, miles):
		self.odometer_reading += miles
		
class ElectricCar(Car):
	def __init__(self, make, model, year):
		# ...
		super(ElectricCar, self).__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()

给子类定义属性和方法其实和创建一个类差不多,该怎么创建就怎么创建,继承只是多了super哪一句还有开始指明父类,来继承父类的属性和方法。

  1. 重写父类的方法
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	def increment_odometer(self, miles):
		self.odometer_reading += miles
	
	def fill_gas_tank():
		print("This car need a gas tank!")
		
class ElectricCar(Car):
	def __init__(self, make, model, year):
		# ...
		super(ElectricCar, self).__init__(make, model, year)
	
	def fill_gas_tank():
		print("This car doesn't need a gas tank!")

如果你在子类内重新定义父类的方法,当你想要使用这个方法时,那么程序将会使用你重写的方法。

  1. 将实例用作属性
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	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.")
		
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()

上面这个例子就是把类Battery实例化给类ElectricCar作为属性。
这样做的好处就是在属性和方法过多时,可以使其更加整洁,也容易查找和修改。

  1. 模拟实物
    这个意思大概是,不能被语法困住,学习编程不仅仅只是学习它的语法,更应该学习在编程前的思考逻辑,如何能够快速,方便地解决一个问题,这种思考才是最重要的。

动手试一试:

# 9-6
class Restaurant():
	def __init__(self, restaurant_name, restaurant_type):
		self.restaurant_name = restaurant_name
		self.restaurant_type = restaurant_type
		
	def describe_restaurant(self):
		print("\n这家餐厅的名字是:" + self.restaurant_name + "\n这家餐厅的类型是" + self.restaurant_type)
		
	def open_restaurant(self):
		print("\n这家餐厅开始营业!")
		
class IceCreamStand(Restaurant):
	
	def __init__(self, restaurant_name, restaurant_type):
		super().__init__(restaurant_name, restaurant_type)
		self.flavors = []
		
	def add_flavors(self, flavor):
		self.flavors.append(flavor)
		print('添加了' + flavor + '口味的')
		
	def read_flavors(self):
		print('我喜欢的冰淇淋口味有:')
		for flavor in self.flavors:
			print('\t' + flavor)
		
my_icecreamstand = IceCreamStand('小小冰淇淋', '冰淇淋店')
my_icecreamstand.add_flavors('抹茶')
my_icecreamstand.add_flavors('香草')
my_icecreamstand.add_flavors('草莓')
my_icecreamstand.read_flavors()
# 9-7
class User():
	def __init__(self, first_name, last_name, **kd):
		self.first_name = first_name
		self.last_name = last_name
		self.preperties = {}
		for key, value in kd.items():
			self.preperties[key] = value
		
	def describe_user(self):
		print('\nfirst name: ' + self.first_name + '\nlast name: ' + self.last_name)
		for key, value in self.preperties.items():
			print(key + ': ' + value + '\n')
			
class Admin(User):
	
	def __init__(self, first_name, last_name, **kd):
		super().__init__(first_name, last_name, **kd)
		self.privileges = ['can add post', 'can delete post', 'can ban user']
		
	def show_privileges(self):
		print(self.first_name + '所拥有的权限有:')
		for privilege in self.privileges:
			print('\t' + privilege)
			
my_admin = Admin('admin', 'admin')
my_admin.show_privileges()
# 9-8
class User():
	def __init__(self, first_name, last_name, **kd):
		self.first_name = first_name
		self.last_name = last_name
		self.preperties = {}
		for key, value in kd.items():
			self.preperties[key] = value
		
	def describe_user(self):
		print('\nfirst name: ' + self.first_name + '\nlast name: ' + self.last_name)
		for key, value in self.preperties.items():
			print(key + ': ' + value + '\n')
			
class Privileges():
	
	def __init__(self):
		self.privileges = ['can add post', 'can delete post', 'can ban user']
		
	def show_privileges(self):
		print('你所拥有的权限有:')
		for privilege in self.privileges:
			print('\t' + privilege)
			
class Admin(User):
	
	def __init__(self, first_name, last_name, **kd):
		super().__init__(first_name, last_name, **kd)
		self.privileges = Privileges()
		
my_admin = Admin('admin', 'admin')
my_admin.privileges.show_privileges()
# 9-9
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	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)
		
	def upgrade_battery(self):
		if self.battery_size != 85:
			self.battery_size = 85
		
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()
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

四、导入类

  1. 导入单个类
# 这里保存在car.py
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	def increment_odometer(self, miles):
		self.odometer_reading += miles
# 这里保存在my_car.py
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_odomter()
  1. 在一个模块中存储多个类
# 这是保存为car.py
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	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()
# 这是保存为my_electric_car.py
from car import ElectricCar

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

print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
  1. 从一个模块中导入多个类
这里保存在my_cars.py
from car import Car, ElectricCar

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

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_nameJ())
  1. 导入整个模块
import car

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

my_tesla = car.ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_nameJ())
  1. 导入模块中的所有类
from car import *

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

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_nameJ())
  1. 在一个模块中导入另一个模块
# 这是保存为car.py
class Car():
	def __init__(self, make, model, year,odometer_reading=0):
		self.make = make
		self.model = model
		self.year = year
		self.odometer_reading = odometer_reading
		
	def get_descriptive_name(self):
		long_name = str(self.yesr) + ' ' + self.make + ' ' + self.model
		return long_name.title()
		
	def read_odomter(self):
		print("This car has " + str(self.odometer_reading) + " miles on it.")
		
	def updata_odometer(self, mileage):
		self.odometer_reading = mileage

	def increment_odometer(self, miles):
		self.odometer_reading += miles
# 这里保存在electric_car.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 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()
# 这里保存在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_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_nameJ())
  1. 自定义工作流程
    233
    自定义
    把握好每个类

动手试一试:

# 9-10
# 这里保存在restaurant.py
class Restaurant():
	def __init__(self, restaurant_name, restaurant_type):
		self.restaurant_name = restaurant_name
		self.restaurant_type = restaurant_type
		
	def describe_restaurant(self):
		print("\n这家餐厅的名字是:" + self.restaurant_name + "\n这家餐厅的类型是" + self.restaurant_type)
		
	def open_restaurant(self):
		print("\n这家餐厅开始营业!")
# 这里保存在my_restaurant.py
from restaurant import Restaurant

my_restaurant = Restaurant('北京烤鸭', '烤鸭店')
your_restaurant = Restaurant('糖醋排骨', '排骨店')
his_restaurant = Restaurant('宫保鸡丁', '鸡肉店')

my_restaurant.describe_restaurant()
your_restaurant.describe_restaurant()
his_restaurant.describe_restaurant()
# 9-11
# 这里保存在users.py
class User():
	def __init__(self, first_name, last_name, **kd):
		self.first_name = first_name
		self.last_name = last_name
		self.preperties = {}
		for key, value in kd.items():
			self.preperties[key] = value
		
	def describe_user(self):
		print('\nfirst name: ' + self.first_name + '\nlast name: ' + self.last_name)
		for key, value in self.preperties.items():
			print(key + ': ' + value + '\n')
			
class Privileges():
	
	def __init__(self):
		self.privileges = ['can add post', 'can delete post', 'can ban user']
		
	def show_privileges(self):
		print('你所拥有的权限有:')
		for privilege in self.privileges:
			print('\t' + privilege)
			
class Admin(User):
	
	def __init__(self, first_name, last_name, **kd):
		super().__init__(first_name, last_name, **kd)
		self.privileges = Privileges()
# 这里保存在my_admin.py
from users import Admin

my_admin = Admin('admin', 'admin')
my_admin.privileges.show_privileges()
# 9-11
# 这里保存在user.py
class User():
	def __init__(self, first_name, last_name, **kd):
		self.first_name = first_name
		self.last_name = last_name
		self.preperties = {}
		for key, value in kd.items():
			self.preperties[key] = value
		
	def describe_user(self):
		print('\nfirst name: ' + self.first_name + '\nlast name: ' + self.last_name)
		for key, value in self.preperties.items():
			print(key + ': ' + value + '\n')
# 这里保存在admin.py
from user import User

class Privileges():
	
	def __init__(self):
		self.privileges = ['can add post', 'can delete post', 'can ban user']
		
	def show_privileges(self):
		print('你所拥有的权限有:')
		for privilege in self.privileges:
			print('\t' + privilege)
			
class Admin(User):
	
	def __init__(self, first_name, last_name, **kd):
		super().__init__(first_name, last_name, **kd)
		self.privileges = Privileges()
# 这里保存在my_admin.py
from admin import Admin

my_admin = Admin('admin', 'admin')
my_admin.privileges.show_privileges()

五、Python标准库
Python标准库是一组Python自带的模块,可以方便用户的操作。

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() + '.')

动手试一试:

# 9-13
"""
# 6-4的代码
types = {
	'int':'整数型',
	'float':'浮点型',
	'boolean':'布尔型',
	'string':'字符串',
	'char':'字节'
	}
	
for key, value in types.items():
	print(key + ':' + value)

types['print'] = '打印'
types['if'] = '条件检测'
types['for'] = '循环'
types['[]'] = '列表'
types['{}'] = '字典'

for key, value in types.items():
	print(key + ':' + value)
"""
from collections import OrderedDict

types = OrderedDict()

types['int'] = '整数型'
types['float'] = '浮点型'
types['boolean'] = '布尔型'
types['string'] = '字符串'
types['char'] = '字节'

for key, value in types.items():
	print(key + ':' + value)

types['print'] = '打印'
types['if'] = '条件检测'
types['for'] = '循环'
types['[]'] = '列表'
types['{}'] = '字典'

for key, value in types.items():
	print(key + ':' + value)
# 9-14
from random import randint

class Die():
	
	def __init__(self, sides=6):
		self.sides = sides

	def roll_die(self):
		print(randint(1, self.sides))

count = 1
six_Die = Die()
while count <= 10:
	six_Die.roll_die()
	count += 1
	
count = 1
ten_Die = Die(10)
while count <= 10:
	ten_Die.roll_die()
	count += 1

count = 1
twenty_Die = Die(20)
while count<=10:
	twenty_Die.roll_die()
	count += 1

六、类编码风格

  1. 驼峰命名法:SixDie(不用下划线,每个单词首字母大写)
  2. 实例名和模块名都采用小写格式,单词与单词之间用下划线:six_die
  3. 每个类和模块要注释功能文档
  4. 在类中,使用一个空行来分隔方法;在模块中,使用两个空行来分隔类
  5. 导入模块时,先编写导入标准库的语句,然后用一个空行分隔,接着写导入自己编写的模块的语句。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值