前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >类和继承

类和继承

作者头像
y191024
发布2022-09-20 18:59:50
4650
发布2022-09-20 18:59:50
举报
文章被收录于专栏:睡不着所以学编程

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。比如猫是一个类,那么我的猫就是一个实例对象。

代码语言:javascript
复制
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行,我们让学生调用了阅读的方法。

给属性指定默认值:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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")

挖坑:多重继承,其他魔术方法

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 睡不着所以学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档