zoukankan      html  css  js  c++  java
  • Python 入门日记(九)—— 类

    2020.07.15 Python 入门的 Day8

    成就:类及其模块化

    • 使用几乎可以模拟任何东西,根据类来创建对象被称为实例化
    • 下述代码是一个 Dog 类:
    # 类中的函数被称为方法
    class Dog():
        def __init__(self, name, age):
            self.name = name
            self.age = age
    # 方法 __init__() 是一个特殊的方法
    # 方法 __init__() 包含三个形参, self, name, age
    # self 是必不可少的,并且必须在其他形参的前面
    # self 是一个指向实例本身的引用,会自动传递
    # 当我们根据 Dog 类去创建实例的时候,只需给最后两个形参提供值
    # 以 self 为前缀的变量都可以供类中的所有方法使用
    # 像这样可以通过实例访问的变量成为属性
        def sit(self):
            print(self.name.title() + 'is now sitting.')
    
        def roll_over(self):
            print(self.name.title() + " rolled over!")
    • 可将类视为如何创建实例的说明,下述代码是创建一个表示特定小狗的实例:
    my_dog = Dog('willie', 6)
    your_dog = Dog('lucy', 3)
    # 创建小狗
    print("My dog's name is " + my_dog.name.title() + ".")
    print("My dog is " + str(my_dog.age) + " years old.")
    # 使用句点表示法访问实例的属性
    my_dog.sit()
    my_dog.roll_over()
    your_dog.sit()
    your_dog.roll_over()
    # 使用句点表示法调用实例中的方法
    • 下述是一个创建表示汽车的类的代码:
    class Car():
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0
    # 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):
            if miles >= 0:
                self.odometer_reading += miles
            else:
                print("You can't roll back an odometer!")
    • 下述为三种修改属性的值的方法
    my_new_car.odometer_reading = 23
    # 第一种:直接修改属性的值
    my_new_car.update_odometer(24)
    # 第二种:编写更新属性的方法
    my_new_car.increment_odometer(1)
    # 第三种:通过方法对属性的值进行递增
    • 如果要编写的类是另一个现成的类的特殊版本,可用继承
    • 一个类继承另一个类时,会自动获得另一个类的属性和方法。
    • 原有的类称为父类超类),新的类称为子类
    class ElectricCar(Car):
        def __init__(self, make, model, year):
            super().__init__(make, model, year)
    # 新的类 ElectricCar 继承了父类 Car
    # super()是一个特殊的函数,将父类和子类关联起来
    
    my_tesla = ElectricCar('tesla', "model s", 2016)
    print(my_tesla.get_descriptive_name())
    # 调用
    • 让一个类继承另一个类后,可添加新的属性和方法。
    class ElectricCar(Car):
        def __init__(self, make, model, year):
            super().__init__(make, model, year)
            self.battery_size = 70
    # 新的属性
        def describe_battery(self):
            print("This car has a " +
                  str(self.battery_size) +
                  "-KWh battery.")
    
        def fill_gas_tank(self):
            print("This car donesn't need a gas tank!")
    # 新的方法
    • 如果父类有不适用于子类的方法,可直接重写,调用子类的方法时 Python 会以新的为准。
    • 可以将类的一部分作为一个独立的类提取出来,将实例用作属性。
    class Battery():
        def __init__(self, battery_size=70):
            self.battery_size = battery_size
    
        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().__init__(make, model, year)
            self.battery = Battery(100)
    # self.battery 是一个 Battery 类的实例,也是 ElectricCar 类的一个属性
    
    my_tesla.battery.describe_battery()
    # 调用时用句号表示法
    • 类可作为一个模块被导入到一个文件中,样例如下:
    from Car import Car
    # 从 Car.py 里导入 Car 类
    my_new_car = Car('audi', 'a4', 2016)
    print(my_new_car.get_descriptive_name())
    my_new_car.odometer_reading = 23
    my_new_car.read_odometer()
    # 调用时正常使用
    
    # 当然也可以直接导入整个模块(import Car)
    # 但是调用时要用句号表示法加前缀
    # 不推荐全部导入(from module_name import *)
    • Python 中有很多标准库,库中有很多封存的类,可以直接调用。
  • 相关阅读:
    Python数据结构与算法—栈
    var_export 和 var_dump
    PHp 下标是 区分大小写的
    和眼睛相处
    css 3 animation
    background-attachment: fixed | attachment 区别
    js 函数表达和函数声明
    function 和 new Function
    lastIndexOf js
    substring substr slice js比较
  • 原文地址:https://www.cnblogs.com/A-Tree/p/13308862.html
Copyright © 2011-2022 走看看