我们在编码的过程中,可能会给对象添加越来越多的功能,即使我们使用了继承,也不可避免的使文件越来越臃肿。

为了避免这种情况, Python允许将对象存储在模块中,并且可以在其他模块中进行导入。

其实这和C#中的命名空间相类似。

我们首先准备了一个叫car.py的模块,其中包含了多个对象:

  1. class Car():
  2.  
  3. def __init__(self, make, model, year):
  4. self.make = make
  5. self.model = model
  6. self.year = year
  7. self.odometer_reading = 0
  8.  
  9. def get_description_name(self):
  10. long_name = str(self.year) + ' ' + self.make + ' ' + self.model
  11. return long_name.title()
  12.  
  13. def read_odometer(self):
  14. print("This car has " + str(self.odometer_reading) + " miles on it.")
  15.  
  16. def update_odometer(self, mileage):
  17. if mileage >= self.odometer_reading:
  18. self.odometer_reading = mileage
  19. else:
  20. print("You cannot do that.")
  21.  
  22. def increase_odometer(self, miles):
  23. if miles >= 0:
  24. self.odometer_reading += miles
  25. else:
  26. print("The value is invalid, please input the number which should more than zero.")
  27.  
  28. def fill_gas(self):
  29. print("Car is filling gas.")
  30.  
  31. '''生成一个电池类'''
  32. class Battery():
  33. def __init__(self, size = 100):
  34. self.size = size
  35.  
  36. def describe_battery(self):
  37. print("Battery has " + str(self.size) + "-kwh battery. " )
  38.  
  39. def show_range(self):
  40. print("Battery has " + str(self.size * 3) + " killmaters on full charge")
  41.  
  42. '''继承car,生成一个新类'''
  43. class ElectricCar(Car):
  44. def __init__(self, make, model, year):
  45. super().__init__(make, model, year)
  46. self.battery = Battery()
  47.  
  48. def fill_gas(self):
  49. print("Electric car no gas tank.")

接下来我们新建一个my_car的模块,并导入Car类并创建实例,并且调用一些方法:

  1. #-*- coding:utf-8 -*-
  2. from car import Car
  3.  
  4. my_new_car = Car('Volvo', 'V60', '')
  5. print(my_new_car.get_description_name())
  6.  
  7. my_new_car.odometer_reading = 200
  8. my_new_car.read_odometer()
  9.  
  10. '''
  11. 输出:
  12. 2020 Volvo V60
  13. This car has 200 miles on it.
  14.  
  15. '''

同样,我们也可以在一个模块里面存储、导入多个类,进行操作:

  1. #-*- coding:utf-8 -*-
  2. from car import Car, ElectricCar
  3.  
  4. my_new_car = Car('Volvo', 'V60', '')
  5. print(my_new_car.get_description_name())
  6.  
  7. my_new_car.odometer_reading = 200
  8. my_new_car.read_odometer()
  9.  
  10. my_byd_tang = ElectricCar('BYD', 'Tang', '')
  11. my_byd_tang.battery.show_range()
  12. my_byd_tang.fill_gas()
  13. '''
  14. 输出:
  15. 2020 Volvo V60
  16. This car has 200 miles on it.
  17. Battery has 300 killmaters on full charge
  18. Electric car no gas tank.
  19.  
  20. '''

当然你可以导入模块中的所有的类:

  1. #-*- coding:utf-8 -*-
  2. from car import *
  3.  
  4. my_new_car = Car('Volvo', 'V60', '')
  5. print(my_new_car.get_description_name())
  6.  
  7. my_new_car.odometer_reading = 200
  8. my_new_car.read_odometer()
  9.  
  10. my_byd_tang = ElectricCar('BYD', 'Tang', '')
  11. my_byd_tang.battery.show_range()
  12. my_byd_tang.fill_gas()
  13.  
  14. my_battery = Battery()
  15. my_battery.show_range()
  16. '''
  17. 输出:
  18. 2020 Volvo V60
  19. This car has 200 miles on it.
  20. Battery has 300 killmaters on full charge
  21. Electric car no gas tank.
  22. Battery has 300 killmaters on full charge
  23. '''

也可以直接导入整个模块,不过这种方式需要在类的名字前加上模块名:

  1. #-*- coding:utf-8 -*-
  2. import car
  3.  
  4. my_new_car = car.Car('Volvo', 'V60', '')
  5. print(my_new_car.get_description_name())
  6.  
  7. my_new_car.odometer_reading = 200
  8. my_new_car.read_odometer()
  9.  
  10. my_byd_tang = car.ElectricCar('BYD', 'Tang', '')
  11. my_byd_tang.battery.show_range()
  12. my_byd_tang.fill_gas()
  13.  
  14. my_battery = car.Battery()
  15. my_battery.show_range()
  16. '''
  17. 输出:
  18. 2020 Volvo V60
  19. This car has 200 miles on it.
  20. Battery has 300 killmaters on full charge
  21. Electric car no gas tank.
  22. Battery has 300 killmaters on full charge
  23. '''

我们在实际的编码过程中,还是比较推荐一个类只定义在单一的模块中,这样模块的大小不会太大,也方便其他模块进行调用。

也方便进行维护。

Python 学习笔记16 类 - 导入的更多相关文章

  1. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  2. Python学习笔记16:标准库多线程(threading包裹)

    Python主要是通过标准库threading包来实现多线程. 今天,互联网时代,所有的server您将收到大量请求. server要利用多线程的方式的优势来处理这些请求,为了改善网络port读写效率 ...

  3. Python学习笔记 - day7 - 类

    类 面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同.在Python中,定义类 ...

  4. python学习笔记(七) 类和pygame实现打飞机游戏

    python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...

  5. Python学习笔记:类

    类可以将数据与函数封装起来,用一个例子解释,先定义一个类: class athlete: def __init__(self,a_name,a_dob=None,a_times=[]): self.n ...

  6. python学习笔记1-元类__metaclass__

    type 其实就是元类,type 是python 背后创建所有对象的元类   python 中的类的创建规则: 假设创建Foo 这个类 class Foo(Bar): def __init__(): ...

  7. Python学习笔记12—类

    典型的类和调用方法: #!/usr/bin/env Python # coding=utf-8 __metaclass__ = type #新式类 class Person: #创建类 def __i ...

  8. Python 学习笔记 - 10.类(Class) 1

    定义 Python 的 Class 比较特别,和我们习惯的静态语言类型定义有很大区别. 1. 使用一个名为 __init__ 的方法来完成初始化.2. 使用一个名为 __del__ 的方法来完成类似析 ...

  9. python学习笔记16(错误、异常)

    一.什么是错误,什么是异常 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助 ...

随机推荐

  1. js Array 数组方法扩展

    //去重复   Array.prototype.unique = function()  {     this.sort();     var re=[this[0]];     for(var i ...

  2. spark复习笔记(4):spark脚本分析

    1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...

  3. pg_config - 检索已安装版本的 PostgreSQL 的信息

    SYNOPSIS pg_config {--bindir | --includedir | --includedir-server | --libdir | --pkglibdir | --confi ...

  4. oracle常用操作方法

    ---oracle创建数据库,基于plsqldev工具 1.创建表空间,创建空内容的物理文件create tablespace db_test --表空间名 datafile 'D:\test.dbf ...

  5. 锁、volatile、CAS的比较

    一.锁 锁是一种悲观的机制.为多线程提供了互斥的访问机制.多个线程同时竞争锁时,没获得锁的线程将会被挂起(智能的JVM会根据之前获取锁操作中对锁的持有时间长短来判断是使线程挂起还是自旋) 锁的劣势:1 ...

  6. Wannafly挑战赛27 D绿魔法师

    链接Wannafly挑战赛27 D绿魔法师 一个空的可重集合\(S\),\(n\)次操作,每次操作给出\(x,k,p\),要求支持下列操作: 1.在\(S\)中加入\(x\). 2.求\[\sum_{ ...

  7. django之类视图

    一:类视图 1. 为什么使用类视图? # 以注册请求逻辑为例 def register(request): if request.method == "GET": render(r ...

  8. Python---字符串拼接和严格字符串

    BIF内建函数 Python3中提供了多少个内置函数     68 Python3中TUling tuling是不是一样的   严格区别大小 “=”和“==”的运用与区别 - ‘=‘ 是用来赋值的 - ...

  9. java源码生成可运行jar

    参考资料:https://blog.csdn.net/whatday/article/details/54767187 源码目录层级如下:

  10. vue项目-本机ip地址访问

    修改 在 vue项目文件夹中的 package.json scripts >dev 添加 --host 0.0.0.0 "dev": "webpack-dev-se ...