类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。比如猫是一个类,那么我的猫就是一个实例对象。
class Student: # 定义一个学生类(请使用大驼峰命名法)
grade = 2 # 这是类变量,类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
def __init__(self, name, age, gender): # 初始化学生的属性
self.name = name #对象.名字 = name
self.age = age # 年龄
self.gender = gender #性别
print(age, name, gender)
def reading(self): # 定义学生的方法(阅读)
print(self.name + " is reading\n")
stu1 = Student("yefengting", 20, "female") # 在类中创建一个实例对象
stu1.reading() # 调用类中的方法
# 调用方法:
stu1.reading() #1.对象.方法()
Student.reading(stu1) #2.类名.方法(对象)
在上述例子中,我们定义了一个学生类,然后定义了一个类变量(年级),随后使用魔术方法__init__()初始化了学生的属性,__init__()的第一个形参一定是self,即对象本身。在我们创建实例时初始化会自动执行,随后会将实例化对象传入,再对每个对象都进行初始化。
另外我们定义了一个阅读的方法,让学生可以阅读,在类中def的叫做方法,而在类之外def的叫函数,其实区别不大。
stu1就是我们实例化出来的第一个学生对象。我们传入了三个实参,名字、年龄、性别,因此我们的学生stu1的属性就被初始化了。
第15行,我们让学生调用了阅读的方法。
给属性指定默认值:
class Cars: # 定义Car类
def __init__(self, make, model, year):
# 初始化秒数汽车的属性
self.make = make
self.model = model
self.year = year
self.odometer = 0 # 设置属性默认值为0
# 修改属性的值
"""
三种方法:
1.通过实例进行修改
2.通过方法去设置
3.通过方法进行递增
"""
# 1. 通过实例修改
car1 = Car("audi", "a4", 2016)
car1.odometer = 23
# 2.通过方法设置
def update_odometer(self, mileage):
self.odometer_reading = mileage # 更新默认值的值
# 3.通过方法来递增
def update_odometer(self, miles):
if miles >=0:
self.odometer_reading += miles
else:
print("don't roll back the odometer!")
继承
假如我们创建了一个Car类,那么如果我们的车不是传统的汽车,而是电动汽车,且有传统车所没有的属性(比如电量),那么此时我们可以用继承的方法继承父类的所有属性,再添加特有的属性/重写父类的属性,方法如下:
以下是父类Car:
class Car:
def __init__(self, make, model, year):
# 初始化秒数汽车的属性
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 # 默认值为0
def read_odometer(self):
# 打印一条关于汽车里程的消息
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
self.odometer_reading = mileage
def gas_tank(self): # 油量,这是电动车所不需要的属性
print("the tank is ...."+self.year)
现在我们来继承:
继承的语法是 super().__init__(父类的所有属性都拿过来,可以再加上子类的属性,注意:不需要传self)
class ElectricCar(Car): #ElectricCar为子类,Car为父类
def __init__(self, make, model, year):
super().__init__(make, model, year) # 父类又被称为超类
self.buttery_size=70 # 添加电动车的特有属性
print(self.make+" "+self.model+" "+str(self.year))
def gas_tank(self): # 重写父类属性
print("the car doesn't need a gas tank")
def describe_buttery(self): #给子类定义属性和方法
print("this car has a "+str(self.buttery_size)+" kWh battery")
挖坑:多重继承,其他魔术方法