Python中的类(二)

1、导入类

        Python允许将定义的类存储在模块中,然后在主程序中导入所需的模块。

1.1 导入单个类

            在car.py文件中定义了类Car: 

car.py  

#定义类
class Car():
    """创建车类"""
    def __init__(self,maker,model,year):
        """初始化属性"""
        self.maker = maker
        self.model = model
        self.year = year
        self.odometer = 0

    def show(self):
        """返回信息"""
        lname = str(self.year) + ' ' + self.maker + ' ' + self.model
        return lname

    def update_odometer(self,new_odometer):
        """更新里程"""
        if new_odometer >= self.odometer:
            self.odometer = new_odometer
        else:
            print("You can't roll back an odometer!")

    def increase_odometer(self,miles):
        self.odometer += miles

接着,在另一个文件中导入类,并创建实例:

car_0.py

from car import Car

car_0 = Car('Tesla','model s',2019)
print(car_0.show())
car_0.odometer = 30
print(car_0.odometer)

#结果:
2019 Tesla model s
30

1.2 在一个模块中存储多个类

        可以根据需要在一个模块中存储任意数量的类:

car.py

#定义类
class Car():
    """创建车类"""
    def __init__(self,maker,model,year):
        """初始化属性"""
        self.maker = maker
        self.model = model
        self.year = year
        self.odometer = 0

    def show(self):
        """返回信息"""
        lname = str(self.year) + ' ' + self.maker + ' ' + self.model
        return lname

    def update_odometer(self,new_odometer):
        """更新里程"""
        if new_odometer >= self.odometer:
            self.odometer = new_odometer
        else:
            print("You can't roll back an odometer!")

    def increase_odometer(self,miles):
        self.odometer += miles

class Battery():
    """模拟电瓶"""
    def __init__(self,battery_size = 60):
        self.battery_size = battery_size

    def get_range(self):
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 60:
            range = 200
        return range

class Ecar(Car):
    """电车"""
    def __init__(self,maker,model,year):
        super().__init__(maker,model,year)
        self.battery = Battery()

car_0.py

from car import Ecar

car_0 = Ecar('Tesla','model s',2019)
print(car_0.show())
print(car_0.battery.battery_size)
print(car_0.battery.get_range())

#结果:
2019 Tesla model s
60
200

1.3 从一个模块导入多个类

        可以根据需要在程序中导入任意数量的类。从一个模块导入多个类时,用逗号分隔各个类:

from car import Car,Ecar

car_0 = Car('Audi','A4',2016)
print(car_0.show())
car_1 = Ecar('Tesla','model s',2019)
print(car_1.show())

#结果:
2016 Audi A4
2019 Tesla model s

1.4 导入整个模块

        还可以导入整个模块,使用句点表示法访问需要的类。

import car

car_0 = car.Car('Audi','A4',2016)
print(car_0.show())
car_1 = car.Ecar('Tesla','model s',2019)
print(car_1.show())

1.5 导入模块中所有的类

        要导入一个模块中所有的类,可以使用以下语句:

from module_name import *

        但不建议这样导入。

        首先,这样导入没有明确指出使用了模块中的哪些类,不方便阅读和检查程序。其次,这种导入方式还可能引发命名冲突。

1.6 在一个模块中导入另一个模块

        有时需要将类分散到多个模块中,以免模块太大,或在同一模块中存储不相关的类。将类存储在多个模块中时,一个模块中的类可能依赖于另一个模块中的类。这时,可以在前一个模块中导入必要的类。

        例如,改写前述代码,将Car类单独存储在一个模块,将Ecar类和Battery类存储在另一个模块ecar.py:

from car import Car
class Battery():
    """模拟电瓶"""
    def __init__(self,battery_size = 60):
        self.battery_size = battery_size

    def get_range(self):
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 60:
            range = 200
        return range

class Ecar(Car):
    """电车"""
    def __init__(self,maker,model,year):
        super().__init__(maker,model,year)
        self.battery = Battery()
from car import Car
from ecar import  Ecar

car_0 = Car('Audi','A4',2016)
print(car_0.show())
car_1 = Ecar('Tesla','model s',2019)
print(car_1.show())

#结果:
2016 Audi A4
2019 Tesla model s

2、Python标准库

        Python标准库是一组模块,安装的Python都包含它。可以使用标准库中的任何函数和类,只需在程序开头使用import语句。

        下面以模块collections中的一个类——OrderedDict为例。字典可以将键和值关联,但不记录添加键值对的顺序。使用OrderedDict类的实例,该实例于字典几乎相同,区别只在于记录了键值对的添加顺序。

from collections import  OrderedDict

table = OrderedDict()

table['Jack'] = 19
table['Rose'] = 22
table['Bob'] = 23
table['Lily'] = 25

for name,age in table.items():
    print(name + ': ' + str(age))

#结果:
Jack: 19
Rose: 22
Bob: 23
Lily: 25

        这种类兼具列表和字典的主要优点。

        像了解Python标准库,一个资源网站是Python Module of the Week(http://pymotw.com/

3、类编码风格

        类名采用驼峰命名法,及将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名采用小写格式,并在单词之间加上下划线。

        对于每个类,都应在类定义之后包含一个文档字符串,简要描述类的功能,且遵循文档字符串的格式。每个模块也应包含一个文档字符串,对其中的类可用于做什么进行描述。

        在类中,使用空行来分隔方法;在模块中,使用两个空行分隔类。

        需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再加一个空行,然后导入自己编写的模块。这样容易自己和别人阅读代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白的高手之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值