囫囵吞枣学Python(1)——类

囫囵吞枣学Python(1)——类

0.前言

比较潦草的笔记,重在快速学习Python。

不太适用初学编程的朋友,适用于有一门其他编程语言作为基础的朋友。

1.函数

在看Python类之前,先看看传统意义上的函数,从而与后面要学习的类形成一个对比。

这一部分很简单,直接上代码吧:

def my_add(a, b):
    c = a + b
    return c

print(my_add(1, 2))

结果:

3

*.面向对象编程

如果想要完全理解“类”这个概念,面向对象编程是避不开的。

与面向对象编程相对的是面向过程编程,比如刚刚的函数就是面向过程编程。面向过程编程就是把需要做的事一件一件都列出来,然后做完。

参考视频:8分钟搞懂面向对象编程 | 面向过程vs面向对象 | OOP | 封装 继承 多态_哔哩哔哩_bilibili

可以这么理解:

  • 类:一个人;
  • 类的属性:一个人有一个脑袋两只眼,张三李四都长这样;
  • 方法:人能做的事;
  • 方法的属性:做某件事时操作的某个东西;

对于封装、继承、多态,视频中讲的非常非常清晰。这里把视频里面的内容复述一遍:

  • 封装:你用洗衣机的时候只用直接操作洗衣机就得了,不需要去了解”洗衣服“这个过程他是具体怎么操作的;
  • 继承:小学生和大学生都是学生,张三和李四都是人;小学生和大学生能做的事(方法)可能有区别,但是他们都是学生;张三和李四能做的事也有区别,但是他们都是人;小学生和大学生这两个类都可以继承学生这个类,张三和李四都能继承人这个类;当然了,小学生和大学生也可以继承人这个类;
  • 多态:小学生能做作业(方法),大学生能做作业(方法),但是做作业的内容(方法的内容)不一样;当我们把小学生和大学生都继承到学生这个类之后,再调用做作业这个方法,并不需要我们在编写程序的时候加以区分,小学生会自动做小学生的作业,大学生会自动做大学生的作业;

2.类

类的难点并不在于怎么写代码,而在于理解。如果这一部分看不懂,那就需要再看一看刚刚面向对象编程的部分。

2.1.类的属性

class Students:
    def __init__(self, name, age):
        self.name = name
        self.age = age

student1 = Students('Jim', 18)
print(student1.name)

几点需要注意的:

  • class的命名规范是AaaBbbbbCcc,Pascal命名风格;
  • __init__是前后各两个_
  • self是约定俗成的,在调用的时候并不需要写这个参数;
  • 对于self.name = name,第一个name是类的属性,第二个name是传参传进来的;

2.2.类的方法

class Students:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.grade = 0

    def set_grade(self, grade):
        self.grade = grade

student1 = Students('Jim', 18)
print(student1.name)
print(student1.grade)

student1.set_grade(90)
print(student1.grade)

结果:

Jim
0
90

2.3.类的继承

这是重头戏。

class Students:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.grade = 0

    def set_grade(self, grade):
        self.grade = grade

class Pupil(Students):
    def __init__(self, name, age, homework):
        super().__init__(name, age)
        self.homework = homework

    def do_homework(self):
        return self.homework

class Undergraduate(Students):
    def __init__(self, name, age, homework):
        super().__init__(name, age)
        self.homework = homework

    def do_homework(self):
        return self.homework

stu1 = Pupil('张三', 10, 'arithmetic')
stu2 = Undergraduate('李四', 21, 'calculus')

print(stu1.do_homework())
print(stu2.do_homework())

结果:

arithmetic
calculus

可以看到,虽然都是do_homework(),但是结果并不同。

2.4.类的重写

上个例子中,如果把do_homework写死为arithmetic,并将这个方法直接定义到父类中,则在Pupil这个子类中就不需要额外写do_homework,而在Undergraduate这个子类中需要把这个方法重写为calculus

参考视频:「Python」进阶教程 方法重写有什么用?如何实现类的方法重写?使用super访问父类_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值