Python - 类与对象

使用类的三步骤

  • Step 1. 定义类

类是对象的蓝图和模板 有了类就可以创建对象
定义类需要做的两件事情:数据抽象和行为抽象
数据抽象 - 抽取对象共同的静态特征(找名词) - 属性
行为抽象 - 抽取对象共同的动态特征(找动词) - 方法
定义类的关键字 - class - 类名(每个单词的首字母大写)

  • Step 2. 调用构造方法创建学生对象

实际上调用的是Student类中init方法

  • Step 3. 给对象发出消息

通过给对象发消息让对象完成某些工作就
解决任何的问题都是通过让对象去做事情

修改属性的值

  • 通过直接访问属性进行修改
  • 通过方法修改属性的值 - 传参
  • 通过方法对属性的值进行递增

练习:计算长方形的周长和面积

class Rect:

    def __init__(self, lenght, width):
        self.lenght = lenght
        self.width = width

    def area(self):
        return self.lenght * self.width

    def week_lenght(self):
        return (self.lenght + self.width) * 2

def mian():  
    ret1 = Rect(26, 20)
    print(ret1.area())
    print(ret1.week_lenght())

if __name__ == '__main__':
    main()

练习:时钟显示

from time import sleep

class Clock:

    def __init__(self, hour, minute, second):
        self.hour = hour
        self.minute = minute
        self.second = second

    def display(self):
        while True:
            print('目前的时间是:%d:%d:%d' % (self.hour, self.minute, self.second))
            self.second += 1
            if self.second == 60:
                self.minute += 1
                if self.minute == 60:
                    self.hour += 1
                    self.hour %= 60
                self.minute %= 60
            self.second %= 60
            sleep(1)

def main():
    clock1 = Clock(0, 0, 0)
    clock1.display()

if __name__ == '__main__':
    main()

继承

编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类 ,而新类称为子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

重写类方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。

class Car(object):

    """一次模拟汽车的简单尝试"""
    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 can't roll back an odometer!")

    def increment_odometer(self, miles):
        self.odometer_reading += miles


class Battery():

    def __init__(self, battery_size=70):
        self.battery_size = battery_size

    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270

    def describe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-kWh battery.")


class ElectricCar(Car):
    # """电动汽车的独特之处"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        # super() 是一个特殊函数,帮助Python将父类和子类关联起来
        super().__init__(make, model, year)
        self.battery_size = 70
        self.battery = Battery()

    def describe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-kWh battery.")


if __name__ == '__main__':
    my_tesla = ElectricCar('tesla', 'model s', 2016)
    print(my_tesla.get_descriptive_name())
    my_tesla.battery.describe_battery()

导入类

随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,Python允许你将类存储在模块中,然后在主程序中导入所需的模块。

#将上面的类导入另一个程序中
from car import ElectricCar
#可以导入多个类
from car import Car, ElectricCar
#导入模块中的所有类
from module_name import *
#导入整个模块
from car
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容