专栏首页小一的数据分析之路Python入门进阶教程-面向对象

Python入门进阶教程-面向对象

作者:一叶

介绍:放不下灵魂的搬砖者

全文共1750字,阅读全文需7分钟

Python版本3.8.0,开发工具:Pycharm

Python面向对象

面向对象编程(Object Oriented Programming),是使用对象(Objects)作为核心的编程方式。进而就可以把对象(Objects)的数据和运算过程封装(Encapsulate)在内部,而外部仅能根据事先设计好的界面(Interface)与之沟通。

对象的构成:

  • 属性 —— 用自然语言描述,通常是名词(Nouns)
  • 方法 —— 用自然语言描述,通常是动词(Verbs)

举个例子:创建一个对象Teacher(老师) Teacher的属性有name(姓名)、age(年龄)等,Teacher 的方法有teacher(上课)、study(学习) EnglishTeacher(英语老师)也属于Teacher,所以EnglishTeacher可以继承Teacher并且使用Teacher的属性和方法 MathTeacher(数学老师)的teach方法不同于EnglishTeacher,所以可以对方法进行重写。

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法

在类的内部,使用 def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定用 self。

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。在类内部调用self.__private_methods。

Python 类定义

Class 使用 class 关键字进行定义。class name使用驼峰标识,例如MyClass

 1# 定义类
 2class Teacher:
 3    def __init__(self, name, age):
 4        self.name = name
 5        self.age = age
 6
 7    def teach(self):
 8        print("{0} teach".format(self.name))
 9
10    def study(self):
11        print("{0} study".format(self.name))
12
13# 创建类的实例
14my_teacher = Teacher("zhangsan", 18)
15my_teacher.teach()
16
17# 输出
18zhangsan teach

注:

  • self 用来指代将来用这个 Class 创建的 Instance实例。
  • init() 函数是系统创建实例后被初始化的函数。这个函数名称是强制指定的,初始化函数必须使用这个名称;注意 init 两端各有两个下划线 _。
  • self.name,self.age 各接收了一个参数,表示用户属性

Python 类继承

继承,顾名思义,新的事物拥有旧事物的特征,并且可以传递下去。 在Python中,继承的范围更广,比如定义一个实例Teacher,则新的实例EnglishTeacher是老师,所以可以继承Teacher。老师有姓名、年龄、性别等属性,有上课、学习等方法,则英语老师继承老师的所有属性和方法。 再比如,定义一个实例Mother母亲,定义一个实例Father父亲,则新的实例Kids孩子不但可以继承Mother还可以继承Father。 以上两个例子分别是单继承和多继承。 Python可以实现单继承和多继承

单继承

 1# EnglishTeacher继承Teacher类
 2class EnglishTeacher(Teacher):
 3    def __init__(self, name, age, score):
 4        self.name = name
 5        self.age = age
 6        self.score = score
 7
 8    def teach(self):
 9        print("{0} teach".format(self.name))
10
11# 创建类的实例
12teacher = EnglishTeacher("xiaomeng", 10)
13teacher.teach()
14
15# 输出
16xiaomeng study

多继承

 1# 定义父亲类
 2class Father:
 3    def __init__(self, name, age):
 4        self.name = name
 5        self.age = age
 6
 7    def speak(self):
 8        print("{0} is father".format(self.name))
 9
10# 定义母亲类
11class Mother:
12    def __init__(self, name, age):
13        self.name = name
14        self.age = age
15
16    def speak(self):
17        print("{0} is mother".format(self.name))
18
19# Kid继承Father和Mother类
20class Kid(Father, Mother):
21    def speak(self):
22        print("{0} is kid".format(self.name))
23
24
25# 创建类的实例
26kid = Kid("student", 6)
27kid.speak()
28
29# 输出
30baby is kid

Python 类方法重写

在我们定义的老师实例中,老师有上课、学习两个方法,但是英语老师上英语课,数学老师上数学课,不同实例的老师有不同的方法实现,这个时候,我们在创建不同老师实例的过程中需要对方法进行重写。

 1# 创建类的实例
 2class EnglishTeacher(Teacher):
 3    # 重写teach方法 
 4    def teach(self):
 5        print("english teacher {0} teach".format(self.name))
 6
 7teacher = EnglishTeacher("xiaomeng", 10)
 8teacher.teach()
 9
10# 输出
11english teacher xiaomeng teach

运算符重载

运算符重载类似于方法重写,不过运算符的方法属于Python定义好的,我们在创建的时候不需要声明都可以进行重载!

 1class Vector:
 2   def __init__(self, a, b):
 3      self.a = a
 4      self.b = b
 5
 6   def __str__(self):
 7      return 'Vector (%d, %d)' % (self.a, self.b)
 8
 9   # 对 + 运算符重载
10   def __add__(self,other):
11      return Vector(self.a + other.a, self.b + other.b)
12
13v1 = Vector(2,10)
14v2 = Vector(5,-2)
15print (v1 + v2)
16
17# 输出
18Vector (7, 8)

Python系列

Python系列会持续更新,从基础入门到进阶技巧,从编程语法到项目实战。若您在阅读的过程中发现文章存在错误,烦请指正,非常感谢;若您在阅读的过程中能有所收获,欢迎一起分享交流。

如果你也想和我一起学习Python,可以关注我

学习Python,我们不只是说说而已

下节将介绍Python正则表达式

End

本文分享自微信公众号 - 知秋小梦(little_dream_2019),作者:一叶

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 爬虫实战--拿下最全租房数据 | 附源码

    上一篇的实战只是给大家作为一个练手,数据内容比较少,且官网也有对应的 API,难度不大。

    知秋小一
  • Python入门基础教程-列表与字符串高阶操作

    在Python六大数据类型中,字符与列表是最常用的两大类型,且在使用过程中,存在许多实用小技巧,方便更快速的进行数据处理,本小节主要是字符和列表的高阶操作。

    知秋小一
  • 《大话机器学习算法》决策树—看这一篇就够了

    这是一个新的系列,主要讲机器学习的相关算法,希望想入门的你能耐心看完《写在前面的话》

    知秋小一
  • Python自建logging模块

    每一个logger对象,都有一个日志级别,它只会输出高于它level的日志。如果一个logger的level是INFO,那么调用logger.debug()是无...

    小破孩的梦想空间
  • 【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块

    语义分割需要丰富的空间信息和相关大的感受野,目前很多语义分割方法为了达到实时推理的速度选择牺牲空间分辨率,这可能会导致比较差的模型表现。

    BBuf
  • Python的类的继承

    继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些类进行扩展。

    stormwen
  • 用Python实现一个简易的WebSoc

    py3study
  • 基础数据结构 例:栈、队列、链表、数据、字典、树、等【玩转腾讯云】

    栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,把另一端称为栈底。向一个栈插入新元素又称作 进栈、...

    IT茂茂
  • 数据结构学习-python实现-树--0414

    到不了的都叫做远方
  • 【项目实践】YOLO V4万字原理详细讲解并训练自己的数据集(pytorch完整项目打包下载)

    YOLOV4是YOLOV3的改进版,在YOLOV3的基础上结合了非常多的小Tricks。尽管没有目标检测上革命性的改变,但是YOLOV4依然很好...

    OpenCV学堂

扫码关注云+社区

领取腾讯云代金券