# @Time : 2021/7/31 12:10 下午
# @File : main.py
# @Software: PyCharm
#导入类
#实际上就是from *** import ***
from car import Car #导入类
#我们也可以在一个"模块"(其实就是文件)中储存多个类
from car import EletricCar
my_tesla=EletricCar('tesla','model s',2019,10)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()#查看电池容量
my_tesla.battery.get_range()#查看可以走的行程数
my_tesla.getNumberOfPerson()
#从一个模块中导入多个类
from car import Car,EletricCar
my_beetle=Car('volkswagen','beetle',2019,10)
print(my_beetle.get_descriptive_name())
my_tesla=EletricCar('tesla','model s',2019,10)
print(my_tesla.get_descriptive_name())
#或者说,可以导入整个"模块"(文件)
#再通过句点运算符
import car
my_tesla=car.EletricCar('tesla','model s',2019,10)
name=my_tesla.get_descriptive_name()
print(name)
my_beetle=car.Car('volkswagen','beetle',2019,10)
print(my_beetle.get_descriptive_name())
#导入模块中的所有类
#其实和函数那里是如出一辙的
from car import *
#当然这种语法也是不推荐的
#需要从一个模块中导入很多种类时
#就利用导入整个模块+句点运算符的方式就非常好
from car import Car #可以看到在生成特斯拉汽车的时候这条语句实际上是没有用到的
from electric_car import EletricCar
my_tesla=EletricCar('tesla','model s',2019,10)
name=my_tesla.get_descriptive_name()
print(name)
my_beetle=car.Car('volkswagen','beetle',2019,10)
print(my_beetle.get_descriptive_name())
#和函数一致,类也要学会利用别名简化代码
from electric_car import EletricCar as Ele
my_tesla=Ele('tesla','model s',2019,10)
name=my_tesla.get_descriptive_name()
print(name)
#原则:在不熟练时,先让代码可行,再让它的结构变得更好
#page161
from Restaurant import Restaurant as RES
my_res=RES('haojiahuo','abaaba')
my_res.open_restaurant()
my_res.describe_restaurant()
from admin import Admin
my_ad=Admin('a','b',100,1,2,3,4,5)
my_ad.show_privileges()
# @Time : 2021/7/31 12:27 下午
# @File : electric_car.py
# @Software: PyCharm
#就是尝试一下在一个模块中导入另一个模块的效果
from car import Car
#电池类
class Battery:
def __init__(self,battery_size=75):
self.battery_size=battery_size
def describe_battery(self):
print(f"This car has a {self.battery_size}-kWh battery.")
def get_range(self):
'''打印一条消息指出电车续航里程'''
if self.battery_size==75:
range=260
elif self.battery_size==100:
range=315
else:
range=0
print(f"the car can go about {range} miles on a full charge.")
def upgrade_battery(self):
if self.battery_size!=100:
self.battery_size=100
class EletricCar(Car):
'''电动车的独特之处'''
def __init__(self,make,model,year,number_served):
'''调用父类"构造函数"'''
super().__init__(make,model,year,number_served)
self.new_battery_size=75#为子类定义新的属性
self.battery=Battery(75)#对象作为属性,即C++的对象成员
#这个语句是很重要的,是python和C++不同的地方,这里没有使用初始化列表而是直接利用函数调用
#这就是python的风格
def descirbe_battery_size(self):#为子类定义新的方法
print(f"the battery size is {self.new_battery_size}.")
def fill_gas(self):
print("the electricCar doesn't need gas!".upper())
# @Time : 2021/7/31 12:15 下午
# @File : car.py
# @Software: PyCharm
class Car:
def __init__(self,make,model,year,number_served):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0
self.number_served=number_served
def get_descriptive_name(self):
long_name=f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
print(f"this car has {self.odometer_reading} miles on it.".title())
def update_odometer(self,mileage):
if mileage>=self.odometer_reading:
self.odometer_reading=mileage
else:
print("you can't roll back an dodmeter.")
def increment_odometer(self,miles):
if miles>=0:
self.odometer_reading+=miles
else:
print("you can't roll back an dodmeter.".upper())
def getNumberOfPerson(self):
print(f"here are {self.number_served} in this car.")
def setNumber(self,number):
self.number_served=number
def increment_number(self,number):
self.number_served+=number
def fill_gas(self,gas_v):
print(f"here are your gas totolly-{gas_v} L.")
#电池类
class Battery:
def __init__(self,battery_size=75):
self.battery_size=battery_size
def describe_battery(self):
print(f"This car has a {self.battery_size}-kWh battery.")
def get_range(self):
'''打印一条消息指出电车续航里程'''
if self.battery_size==75:
range=260
elif self.battery_size==100:
range=315
else:
range=0
print(f"the car can go about {range} miles on a full charge.")
def upgrade_battery(self):
if self.battery_size!=100:
self.battery_size=100
class EletricCar(Car):
'''电动车的独特之处'''
def __init__(self,make,model,year,number_served):
'''调用父类"构造函数"'''
super().__init__(make,model,year,number_served)
self.new_battery_size=75#为子类定义新的属性
self.battery=Battery(75)#对象作为属性,即C++的对象成员
#这个语句是很重要的,是python和C++不同的地方,这里没有使用初始化列表而是直接利用函数调用
#这就是python的风格
def descirbe_battery_size(self):#为子类定义新的方法
print(f"the battery size is {self.new_battery_size}.")
def fill_gas(self):
print("the electricCar doesn't need gas!".upper())
#实际上python继承的语法和过程都比C++更简单
#尤其是super行语句,实际上就相当于一个简单的函数调用而已
#同样python当然也支持对父类中的方法进行一个重定义
#编程语言总有惊人的一致性,比如对象作为属性这一点,定义一个battery的类,将其对象作为电车的属性
# @Time : 2021/7/31 12:39 下午
# @File : admin.py
# @Software: PyCharm
import user
from privileges import Privileges
class Admin(user.User):
def __init__(self,first,last,login_attempts,*otherThing):
super().__init__(first,last,login_attempts,*otherThing)
self.Privileges=Privileges()
self.Privileges.privileges.append(['aaaaaa,fansile'])
def show_privileges(self):
for item in self.Privileges.privileges:
print(f"here are you that {item}.".upper())
# @Time : 2021/7/31 12:38 下午
# @File : privileges.py
# @Software: PyCharm
class Privileges:
def __init__(self):
self.privileges=['can add post','can delete post','can ban user']
# @Time : 2021/7/31 12:35 下午
# @File : Restaurant.py
# @Software: PyCharm
class Restaurant:
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
def describe_restaurant(self):
print(f"here is a restaurant named {self.restaurant_name} and the cuisine is {self.cuisine_type}.".strip())
def open_restaurant(self):
print("ok,the restaurant is now opening.".title())
# @Time : 2021/7/31 12:37 下午
# @File : user.py
# @Software: PyCharm
class User:
def __init__(self,first,last,login_attempts,*otherThing):
self.first_name=first
self.last_name=last
self.other_thing=otherThing
self.login_attempts=login_attempts
def describe_user(self):
print(f"there is a user named {self.first_name+' '+self.last_name}.")
print('and there are other things about him:')
for item in self.other_thing:
print(item)
def greet_user(self):
print(f"hei,{self.first_name+' '+self.last_name}.")
def increment_login_attempts(self):
self.login_attempts+=1
def set_login_attempts(self,attempts_new):
self.login_attempts=attempts_new
def reset_login_attempts(self):
self.login_attempts=0