Python面向对象编程(OOP) —— 导入类
2023-04-18 14:55:40 时间
前面我们讲过导入模块的方法(如何导入模块呢?),其实模块就是在同一个根目录下的 一个Python 文件,类 也是如此,Python 允许你讲类存储在模块中,然后在主程序中导入所需要的模块
目录
一、导入单个类
下面是一个已经定义好的一个汽车的类,这个Python 文件命名为 car.py
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.orometer_reading = 0
def get_description(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name
def read_odometer(self):
print("This car has "+ str(self.orometer_reading) + " miles on it")
def update_orometer(self,miles):
if miles >= self.orometer_reading:
self.orometer_reading = miles
else:
print("You can'troll back an odometer")
def increase(self,miles):
self.orometer_reading +=miles
接下来我们再创建一个名为 my_car.py 的文件,然后导入Car 类,并创建实例
from car import Car #导入 car模块 中的 Car 类
my_new_car =Car("奥迪","a6", 2017)
print(my_new_car.get_description())
my_new_car.orometer_reading = 25
my_new_car.read_odometer()
现在回顾我们写的程序,如果我们把Car 类放入 my_car.py 这个 文件中,这样我的Python 代码得有多长呀!
接下来就看看我们写的my_car.py 中的程序,也就是第二段代码,上面的import 语句 打开模块car,并导入其中的 Car 类,这样我们就可以使用Car 类了,就像它在文件中定义的一样,输出和我们看到的是一样的。
我们通过把 类 移到模块中,然后导入它,你依然可以使用其中的功能,这样我们就提高了我们程序的可读性
二、一个模块中存储多个类
我们直接在上面的模块中加入更多的类
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.orometer_reading = 0
def get_description(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name
def read_odometer(self):
print("This car has "+ str(self.orometer_reading) + " miles on it")
def update_orometer(self,miles):
if miles >= self.orometer_reading:
self.orometer_reading = miles
else:
print("You can'troll back an odometer")
def increase(self,miles):
self.orometer_reading +=miles
class Battery():
#一次模拟电动车充电的尝试
def __init__(self,battery_size = 70):
#初始化电频属性
self.battert_size = battery_size
def describe_battery(self):
print("This car has a "+ str(self.battert_size) + " -kwh battery")
def get_range(self):
#打印一条描述电瓶续航里程的消息
if self.battert_size == 80:
range = 260
elif self.battert_size == 85:
range = 270
message = "This kind of 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)#super是一个特殊的函数,帮助Python将父类和子类关联起来
self.battery = Battery() #这里定义了一个battery 新类
我们再创建一个新的python文件,并名为 my_eletric_car.py
from car import ElectricCar
my_car = ElectricCar("tesa","model's",2019)
print(my_car.get_description())
my_car.battery.describe_battery()
my_car.battery.get_range()
这样的程序是不是让人看得更加舒服一点呢?
三、从一个模块中导入多个类
我们再次创建一个Python 文件名为 :my_cars.py,我们接下来要做的就是一次性导入 Car 和 ElectricCar 类
from car import Car,ElectricCar #类的导入和函数的导入是一样的
my_beetle = Car("Volkswagen",'beetle',2019)
print(my_beetle.get_description())
my_tesla = ElectricCar('tesla','roadster',2019)
print(my_tesla.get_description())
四、导入整个模块
我们直接在my_ cars.py 这个文件中进行修改,我们直接通过导入的模块,然后访问类中的方法
import car #一次性导入整个模块
my_beetle = car.Car("Volkswagen",'beetle',2019)
print(my_beetle.get_description())
my_tesla = car.ElectricCar('tesla','roadster',2019)
print(my_tesla.get_description())
五、导入模块中的所有类
这种方法并不推荐,因为我们在上面导入类的过程中,Python解释器(Pycharm) 会提示你有哪些类可以选择。这种方法导入会可能出现与文件名重复 导致难以察觉的问题。导入方法如下
from module_name import *
更好一点
from module_name.class_name import * #这样导入,及时文件开头没有列出用到的类,但你清楚知道在程序的哪些地方导入的模块,你还能避免导入的类与名称的冲突
相关文章
- Python使用tkinter组件Label显示简单数学公式
- 内网渗透之DCOM横向移动
- 以目标为导向的语义交流的共同语言——一个课程学习框架
- python爬虫前奏【成信笔记】
- HTML 5 File API:文件拖放上传功能
- 教你快速创建 Python 虚拟环境
- pyenv 实现Python多版本自由切换
- 用 Python 对 Excel文件进行批量操作
- Python - 接入钉钉机器人
- Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
- crontab - 解决 mac 下通过 crontab 设置了 Python 脚本的定时任务却无法运行
- [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
- Python科普系列——类与方法(上篇)
- SAP对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs
- Spring Boot 实现通用 Auth 认证的 4 种方式
- 盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据
- OushuDB 学习经验分享(三):技术特点
- Java和Python思维方式的不同之处
- Python中日志记录新技能
- 奥比中光Gemini OpenCV—Python使用