文章目录
- 前言
- 一、类
- 1.创建类
- 2.使用类和实例
- 3.继承
- 4.导入类
- 5.python标准库
- 二、代码
- 1.第一题到第九题
- 2.第十题到第十四题
- 总结
前言
面向对象的编程是最有效的编程方法之一,编写类时,定义一大类的对象都有的通用行为,基于类创造对象时,每个对象都有这样的通用行为。
根据类创建对象被称为实例化。
一、类
1.创建类
类的初始化 init()
init()函数,左右有两条下划线。每当创建实例时,python都会运行它,init()函数第一个形参一定是self,这个形参不需要手动输入,python会自动与输入。每个与类相关的函数都必须有self。让实例能够访问类中的属性和方法。
init函数没有函数return,但是python会自动返回一个表示这个类的实例。通常情况下,我们将首字母大写的当作类,首字母小写的当作实例。
创建一个实例后,若要想对实例进行操作,需要使用句点表示法。
2.使用类和实例
给属性指定默认值
类中的每个属性都要有初始值,设置默认值时,可以在init函数中进行指定默认值,这样设定后,就无需为他的初始值提供实参。
修改属性的值
1.直接改变属性的值:用句点表示法来直接改变init函数中设定的默认值。
2.通过方法改变属性的值:在类中定义一个改变默认值的函数。然后用据点表示法引用函数。
3.通过方法对默认值进行递增:也是一个函数。
3.继承
创建子类实例时,首先要完成的是对父类的对象进行赋值。
创建子类时,父类必须在当前文件夹中,并且在子类的前面。
定义子类时,必须在括号里指定父类的名称,init函数包含实例所需的信息。
super()是一个特殊的函数,将父类与子类连接起来,并调用父类的init函数。
给子类定义属性和方法
子类继承父类的属性和方法后,在继续定义可以区分父类与子类的新方法与属性。
重写父类的方法
当子类中需要改写父类的方法时,只需要在类内部重写即可。
将实例作为属性
针对一个物体而言,如果将它身上的所有属性与方法都放在一个类中,那类就显得非常臃肿,我们可以把这个物体的某部分提取出来,单独作为一个类存在。而在这个物体的类中,可以将部分类的实例作为属性。例如,电动车中有电池,将电池作为一个新类,而在电动中加一个电池的新属性,这个属性等于电池这个类的实例化。
这样做时,引用电池类中的函数时需要仔细思考,一般有好几个句点表达式。
模拟实物
对一个实物进行模拟时,我们要仔细思考,某个属性是属于那一类的属性。
4.导入类
python允许将类存储在模块里,然后在主程序中导入所需要的模块。
导入单个类
from XXX import XXX
导入多个类时,用逗号分割各个类
from XXX import XXX,XXX
导入整个模块
imort XXX
5.python标准库
python标准库中有许多已经编写好的类与函数,我们可以直接导入模块来调用这些函数。
二、代码
1.第一题到第九题
#餐馆
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
self.number_served=0
def describe_restaurant(self):
print('restaurant name : '+self.restaurant_name)
print('cuisine type : '+self.cuisine_type)
def open_restaurant(self):
print('this restaurant is opining')
def set_number_served(self):
self.number_served=int(input('修改餐厅人数为: '))
print(self.number_served)
def increment_number_served(self,num):
self.number_served+=int(num)
print(self.number_served)
restaurant=Restaurant('zhangsanzhijia','Chinese')
restaurant.describe_restaurant()
restaurant.open_restaurant()
#三家餐馆
restaurant_1=Restaurant('lisizhijai','Amercian')
restaurant_2=Restaurant('wangwuzhijia',"France")
restaurant.describe_restaurant()
restaurant.open_restaurant()
restaurant_1.describe_restaurant()
restaurant_1.open_restaurant()
restaurant_2.describe_restaurant()
restaurant_2.open_restaurant()
#用户
class User():
def __init__(self,first_name,last_name):
self.first_name=first_name
self.last_name=last_name
self.login_attempts=0
def describe_user(self):
print('the name of user is '+self.first_name+' '+self.last_name)
def greet_user(self):
print('hi! '+self.first_name+' '+self.last_name)
def increment_login_attempts(self):
self.login_attempts+=1
print(self.login_attempts)
def reset_login_attempts(self):
self.login_attempts=0
print(self.login_attempts)
user=User('zhang','san')
user.describe_user()
user.greet_user()
#就餐人数
restaurant.set_number_served()
restaurant.increment_number_served(5)
#尝试登陆次数
user.increment_login_attempts()
user.increment_login_attempts()
user.increment_login_attempts()
user.reset_login_attempts()
#冰激凌小店
class Icecream(Restaurant):
def __init__(self, restaurant_name, cuisine_type):
super().__init__(restaurant_name, cuisine_type)
self.flavors=['chocolate','strawberry','milk']
def show_flavors(self):
for flavor in self.flavors:
print(flavor)
icecream=Icecream('icecream','icecream')
icecream.show_flavors()
#权限
class Privileges():
def __init__(self):
self.privileges=['can add port','can delete port','can ban user']
def show_privileges(self):
for privilege in self.privileges:
print(privilege)
#管理员
class Admin(User):
def __init__(self, first_name, last_name):
super().__init__(first_name, last_name)
#self.privileges=['can add port','can delete port','can ban user']
self.privileges=Privileges()
#def show_privileges(self):
#for privilege in self.privileges:
#print(privilege)
admin=Admin('zhang','san')
#admin.show_privileges()
admin.privileges.show_privileges()
#电瓶升级
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.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 cannot roll back an odometer')
def increment_odometer(self,mile):
self.odometer_reading+=mile
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.batter_size=70
def describe_battery_size(self):
print('this car has a '+self.batter_size+'-kw battery')
def get_range(self):
if self.batter_size==70:
range=240
elif self.batter_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.batter_size!=85:
self.batter_size=85
electiccar=ElectricCar('qq','qq','5')
electiccar.get_range()
electiccar.upgrade_battery()
electiccar.get_range()
2.第十题到第十四题
前置文件_9_4与_9_3:
#用户
class User():
def __init__(self,first_name,last_name):
self.first_name=first_name
self.last_name=last_name
self.login_attempts=0
def describe_user(self):
print('the name of user is '+self.first_name+' '+self.last_name)
def greet_user(self):
print('hi! '+self.first_name+' '+self.last_name)
def increment_login_attempts(self):
self.login_attempts+=1
print(self.login_attempts)
def reset_login_attempts(self):
self.login_attempts=0
print(self.login_attempts)
from _9_4 import User
#餐馆
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
self.number_served=0
def describe_restaurant(self):
print('restaurant name : '+self.restaurant_name)
print('cuisine type : '+self.cuisine_type)
def open_restaurant(self):
print('this restaurant is opining')
def set_number_served(self):
self.number_served=int(input('修改餐厅人数为: '))
print(self.number_served)
def increment_number_served(self,num):
self.number_served+=int(num)
print(self.number_served)
#冰激凌点
class Icecream(Restaurant):
def __init__(self, restaurant_name, cuisine_type):
super().__init__(restaurant_name, cuisine_type)
self.flavors=['chocolate','strawberry','milk']
def show_flavors(self):
for flavor in self.flavors:
print(flavor)
#权限
class Privileges():
def __init__(self):
self.privileges=['can add port','can delete port','can ban user']
def show_privileges(self):
for privilege in self.privileges:
print(privilege)
#管理员
class Admin(User):
def __init__(self, first_name, last_name):
super().__init__(first_name, last_name)
#self.privileges=['can add port','can delete port','can ban user']
self.privileges=Privileges()
#def show_privileges(self):
#for privilege in self.privileges:
#print(privilege)
#汽车
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.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 cannot roll back an odometer')
def increment_odometer(self,mile):
self.odometer_reading+=mile
#电动车
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.batter_size=70
def describe_battery_size(self):
print('this car has a '+self.batter_size+'-kw battery')
def get_range(self):
if self.batter_size==70:
range=240
elif self.batter_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.batter_size!=85:
self.batter_size=85
程序
from _9_3 import Restaurant
from _9_3 import Admin
from collections import OrderedDict
from random import randint
#导入Restaurant
restaurants=Restaurant('zhangsan','Chinese')
restaurants.describe_restaurant()
#导入Admin _9_4中存放正User
admin=Admin('zhang','san')
admin.describe_user()
admin.privileges.show_privileges()
#python 标准库
favourite_language=OrderedDict()
favourite_language['zhangsan']='c'
favourite_language['lisi']='python'
favourite_language['wangwu']='java'
favourite_language['xiaoming']='javascript'
for name,language in favourite_language.items():
print(name+"'s favorite language is "+language)
#骰子
class Die:
def __init__(self,size):
self.size=size
def roll_die(self):
x=randint(1,self.size)
print(x)
die=Die(6)
die.roll_die()
总结
本章学习的关于类的知识有:
创建类,修改类的属性,继承类,导入类等