Python类
Python类
创建类
一般来说会将类名称首字母大写
用类创建对象的操作称为实例化
class Dog:
def __init__(self ,name ,age):
self.name = name
self.age = age
def 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 = make
self.model = model
self.year = year
self.odometer_reading = 0
def 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 = 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)
创建子类时,父类必须包含在同文件,且在子类的前面(就像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 car
car.Car
你也可以直接导入整个文件,再使用.来访问文件内的类
别名
from car import Car as C
import car as c
使用as关键字可以为导入的模块起别名,之后你可以直接使用别名来访问模块
类的编程风格
命名应采取大驼峰式命名法,即类名的每个单词首字母大写,不添加下划线,而实例和模块名采用全小写,且单词之间用下划线分隔
每个类定义后应紧跟一个文档字符串说明类的功能
类中使用空行分隔方法,模块中使用空行分隔类
导入模块时,先导入标准库模块, 空行分隔后再导入自定义的模块

浙公网安备 33010602011771号