- 给子类定义属性和方法
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哪一句还有开始指明父类,来继承父类的属性和方法。
- 重写父类的方法
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!")
如果你在子类内重新定义父类的方法,当你想要使用这个方法时,那么程序将会使用你重写的方法。
- 将实例用作属性
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作为属性。
这样做的好处就是在属性和方法过多时,可以使其更加整洁,也容易查找和修改。
- 模拟实物
这个意思大概是,不能被语法困住,学习编程不仅仅只是学习它的语法,更应该学习在编程前的思考逻辑,如何能够快速,方便地解决一个问题,这种思考才是最重要的。
动手试一试:
# 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()
四、导入类
- 导入单个类
# 这里保存在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()
- 在一个模块中存储多个类
# 这是保存为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()
- 从一个模块中导入多个类
这里保存在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())
- 导入整个模块
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())
- 导入模块中的所有类
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())
- 在一个模块中导入另一个模块
# 这是保存为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())
- 自定义工作流程
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
六、类编码风格
- 驼峰命名法:SixDie(不用下划线,每个单词首字母大写)
- 实例名和模块名都采用小写格式,单词与单词之间用下划线:six_die
- 每个类和模块要注释功能文档
- 在类中,使用一个空行来分隔方法;在模块中,使用两个空行来分隔类
- 导入模块时,先编写导入标准库的语句,然后用一个空行分隔,接着写导入自己编写的模块的语句。