类及其常用操作
创建类
在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"
修改属性的值
可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)。
- 直接通过实例修改
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)
- 通过方法修改
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编程从入门到实践》
来源:CSDN
作者:游骑小兵
链接:https://blog.csdn.net/ARPOSPF/article/details/104070413