【Python】类及其常用操作

穿精又带淫゛_ 提交于 2020-01-30 07:06:58

类及其常用操作

创建类

在Python中,首字母大写的名称指的是类。

class Dog():
    """一次模拟小狗的案例"""

    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name;
        self.age = age;

    def sit(self):
        """模拟小狗蹲下"""
        print(self.name.title() + " is now sitting.")

    def roll_over(self):
        """模拟小狗打滚"""
        print(self.name.title() + " rollwd over!")

这里类定义中括号是空的,是因为要从空白创建这个类。
**方法__init__() **定义成了包含三个形参:self、name和age。形参self必不可少,还必须位于其他形参的前面。因为Python调用这个__init__()方法创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

根据类创建实例

my_dog = Dog("willie", 6)
print("My dog's name is " + my_dog.name.title() + "; and is " + str(my_dog.age) + " years olg.")

通常可以认为首字母大写的名称是指类,而小写的名称指的是根据类创建的实例。
可以根据需求创建任意数量的实例。

给属性指定默认值

    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.color = "write"

修改属性的值

可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)。

  1. 直接通过实例修改
my_dog = Dog("willie", 6)
my_dog.color = "black"
print("My dog's name is " + my_dog.name.title() + "; and is " + str(my_dog.age) + " years olg; and color is "+my_dog.color)
  1. 通过方法修改
    def update_color(self, color):
        self.color = color

my_dog = Dog("willie", 6)
my_dog.update_color("yellow")

继承

一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

子类的方法__init__()

创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: Xinzhe
@file: ClassDemo.py
@time: 2020/01/{DAY}
"""


class Car():
    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 ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)


my_car = ElectricCar("tesla", "model s", 2016)
print(my_car.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.")

重写父类的方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可以对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,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_size = 70
        self.battery = Battery() # 将实例用作属性

    def describe_battery(self):
        print("This car has a " + str(self.battery_size) + " -kwh battery.")

    def fill_gass(self):
        print("This car doesn't need a gas tank!")

my_car = ElectricCar("tesla", "model s", 2016)
print(my_car.get_descriptive_name())
my_car.battery.describe_battery()

导入类

导入单个类/多个类

创建一个名为car.py的文件,包含Car类的内容,则在另一个文件中导入该类的方法为from car import Car,同理,如果上述文件中存在多个类,例如ElectricCar类,则导入方法为from car import ElectricCar。

从一个模块中导入多个类

可以根据需要在程序文件中导入任意数量的类。
例如 from car import Car, ElectricCar
从一个模块中导入多个类时,需要用逗号分隔各个类。

导入整个模块

例如: import car
不需要指定具体的方法或类名

导入模块中的所有类

可使用下面的语法:
from model_name import *
但是不推荐使用这种方法。原因是无法明确指出使用了模块中的哪些类,而且还会引起名称方面的迷惑。

类编码风格

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

对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。
每个模块都应该包含一个文档字符串,对其中的类可用于做什么进行描述。

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

需要同时导入标准库中的模块和自己编写的模块时候,先编写导入标准库模块的import语句,再添加一个空行,然后编写导入自己编写的模块的import语句。

参考资料

《Python编程从入门到实践》

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!