Python类
- Python类
- 创建类
- 方法
- 属性
- 实例化
- 继承
- 父类:汽车,子类:电车
- 方法重载
- 导入类
- 别名
- 类的编程风格
- 创建类
创建类
一般来说会将类名称首字母大写
用类创建对象的操作称为实例化
class Dog:def __init__(self ,name ,age):self.name = nameself.age = agedef sit(self):print(f"{self.name} is now sitting.")def roll_over(self):print(f"{self.name} rolled over !")
方法
类中定义的函数称为方法
上述代码中的__init__(注意是前后双下划线,不要只写一个)是一种特殊的方法,该方法将在实例化时自动调用,且每个类必须拥有
上述类中的所有方法都带有self参数,且都放在第一位,这是一种规范,使得方法内部可以调用类自带的成员。在实际传递参数中,self参数不需要在初始化时显式的传递。
属性
像上述代码中的 self.name , self.age,由于可以被实例访问,这种成员变量特称为属性(attribute)
实例化
通常将实例用首字母小写来命名
dog = Dog ("xiaoxiao" , 17)
dog.sit()
dog.roll_over()
运行结果如下:
xiaoxiao is now sitting.
xiaoxiao rolled over !
继承
使用继承来使得一个新类自动获得一个旧类的所有属性和方法,此时旧类被称为父类,新类被称为子类
父类:汽车,子类:电车
class Car:def __init__(self,make,model,year):self.make = makeself.model = modelself.year = year self.odometer_reading = 0def get_descriptive_name (self)long_name = f"{self.name} {self.make} {self.model}"return long_name.title()def read_odometer(self):print(f"This car has {self.odometer_reading} meils on it")def update_odometer(self,mileage):if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self,miles):self.odometer_reading += milesclass ElectricCar(Car):def __init__(self,make,model,year):super.__init__(make,model,year)
创建子类时,父类必须包含在同文件,且在子类的前面(就像c++一样),被包含在子类的括号中
super()函数使得子类能够调用父类的方法,
方法重载
将父类中的方法在子类中重新定义一遍便可实现重载,在子类中被重载的方法将被完全覆盖掉
class Car:def __init__(self):self.oil_tank = 0;def print_oil_tank(self):print(f"oil_tank: {self.oil_tank}")class ElectricCar(Car):def __init__(self):super().__init__()def print_oil_tank(self):print(f"ElectricCar has no oil tank!")eCar = ElectricCar()
eCar.print_oil_tank()
运行结果如下:
ElectricCar has no oil tank!
导入类
from car import Car,ElectricCar
上述语句从文件car.py中导入Car、ElectricCar类
from car import *
上述语法导入car.py文件中的所有类,但这种语法容易导致命名冲突并降低代码可读性
import carcar.Car
你也可以直接导入整个文件,再使用.来访问文件内的类
别名
from car import Car as Cimport car as c
使用as关键字可以为导入的模块起别名,之后你可以直接使用别名来访问模块
类的编程风格
命名应采取大驼峰式命名法,即类名的每个单词首字母大写,不添加下划线,而实例和模块名采用全小写,且单词之间用下划线分隔
每个类定义后应紧跟一个文档字符串说明类的功能
类中使用空行分隔方法,模块中使用空行分隔类
导入模块时,先导入标准库模块, 空行分隔后再导入自定义的模块