面向对象

一、类的定义

1.类定义

  • class是关键字,表示要定义类了
  • 类的属性,即定义在类中的变量(成员变量)
  • 类的行为,即定义在类中的函数(成员方法)

2.对象

创建类对象的语法:

class Stu:
name = None
age = None student = Stu()

3.变量、方法

class Stu:
name = None
age = None # 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
def say(self):
print("hello")

self关键字

self关键字是成员方法定义的时候,必须填写的。

  • 它用来表示类对象自身的意思
  • 当我们使用类对象调用方法的是,self会自动被python传入
  • 在方法内部,想要访问类的成员变量,必须使用self

注意:

传参时可以忽略

class Stu:
name = None
age = None # 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
def say(self):
print("hello") student = Stu()
# 调用say方法时,不需要传入参数
student.say()

二、类的属性和行为

现实世界的事物也有属性和行为,类也有属性和行为。

使用程序中的类,可以完美的描述现实世界的事物

为什么非要创建对象才能使用呢?

类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作**

这种套路,称之为:面向对象编程

三、类的构造方法

代码中,为对象的属性赋值需要依次进行,略显繁琐。

使用构造方法可以简化赋值操作

描述

Python类可以使用:_init_()方法,称之为构造方法。

可以实现:

  • 在创建类对象(构造类)的时候,会自动执行。
  • 在创建类对象(构造类)的时候,将传入参数自动传递给___init_()__方法使用。

使用

class Stu:
name = None
age = None def __init__(self, name, age):
self.name = name
self.age = age # 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
def say(self):
print("hello") student = Stu("郜宇博",21)
print(student.age)
print(student.name)

注意

不要忘记init前后都有2个下划线

构造方法也是成员方法,不要忘记在参数列表中提供:self

构造方法内定义成员变量,需要使用self关键字

四、魔术方法

内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法

方法 功能
init 构造方法,可用于创建类对象的时候设置初始化行为
str 用于实现类对象转字符串的行为
lt 用于2个类对象进行小于或大于比较
le 用于2个类对象进行小于等于或大于等于比较
eq 用于2个类对象进行相等比较

1._str_()字符串方法

类似于java的toString()方法

在打印类对象时,将原来的打印内存信息转换为自定义打印格式

class Stu:
name = None
age = None # 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
def say(self):
print("hello") def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"姓名:{self.name},年龄:{self.age}"
student = Stu("郜宇博",21)
print(student)

2._lt_()字符串方法

在进行比较时,可以直接使用 > < 符号进行比较(指定比较的数据)

class Stu:
name = None
age = None def __init__(self, name, age):
self.name = name
self.age = age # Less than的简称
def __lt__(self, other):
return self.age < other.age
student_1 = Stu("郜宇博",21)
student_2 = Stu("郜宇博",50)
# 相当于比较年龄的大小
print(student_1 < student_2)

五、封装

面向对象包含3大主要特性:

  • 封装
  • 继承
  • 多态

现实世界中的事物,有属性和行为。

但是不代表这些属性和行为都是开放给用户使用的

既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。

描述

类中提供了私有成员的形式来支持。

  • 私有成员变量
  • 私有成员方法

在类中定义的私有变量和方法只能类的内部使用

只需要在定义变量、方法名时前面添加两个下划线符号__

class Stu:
name = None
age = None
__gender = '男' stuent = Stu()
print(stuent.gender)

六、继承

每一款手机都是基于老款的设计图,修修改改

1. 代码

如下代码很复杂,需要引入继承来简化代码

引入继承

如下为多继承

pass关键字

代表不执行,空实现,可以用来构建空类,空方法,抽象方法

2. 多继承

注意

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。

即:先继承的保留,后继承的被覆盖

3. 复写

子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。

即:在子类中重新定义同名的属性或方法

class Stu:
name = None
age = None def say(self):
print("我是学生") class Man(Stu):
gender = '男'
def say(self):
print("我是男学生") student = Man()
# 相当于调用Man类重写的say()方法
student.say()

4.调用父类

方式1:使用父类名调用

  • 使用成员变量:父类名.成员变量
  • 使用成员方法:父类名.成员方法(self)

方式2:使用super()调用父类成员

  • 使用成员变量:super().成员变量
  • 使用成员方法:super().成员方法(
class Stu:
name = None
age = None def say(self):
print("我是学生") class Man(Stu):
gender = '男'
def say(self):
print("我是男学生")
def student_say(self):
# 调用了父类的方法,两种方法都可以
# Stu.say(self)
super().say() student = Man()
# 此方法中调用了父类的方法
student.student_say()

七、类型注释

在PyCharm中编写代码,我们经常能够见到如下提示:

因为:PyCharm确定这个对象,是list类型

但是自定义一个函数func,接收一个参数data

PyCharm不会在做出任何提示了

此时使用类型注释就可以帮助编辑器进行代码提示或编写人员的自我提示

注意:

不会真正的对类型做验证和判断。

也就是,类型注解仅仅是提示性的,不是决定性的

1.变量的类型注释

在变量名后加入冒号:和数据类型

from typing import Dict, List
# int类型
var_1: int = 10
# str类型
var_2: str = "adsad"
# list类型
var_3: list = [1, 2, 3]
var_3_1: List[int] = [1, 2, 3]
# dict类型
var_4: dict = {"age": 10, "name": 20}
var_4_1: Dict[str, int] = {"age": 10, "name": 20} # 类对象
class Student:
pass s: Student = Student()

或者使用注释的方法

2.函数

形参的类型注释

def func(data : list):
pass

表明类型后,就可以对变量进行代码提示了

返回值的类型注释

def func(data : list) -> int:
pass

3. Union类型

当列表、字典中数据类型不一致时,需要使用到该函数

Union[类型1,类型2]

from typing import List, Union

var : List[Union[int, str, bool]] = [1, "sss", True]

八、多态

多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。

抽象类

class AC:
def cold(self):
pass
def hot(self):
pass

使用

class AC:
def cold(self):
pass
def hot(self):
pass class Midea(AC):
def cold(self):
print("美的cold") def hot(self):
print("美的hot") class Gree(AC):
def cold(self):
print("格力cold") def hot(self):
print("格力hot") def to_cold(ac : AC):
ac.cold() gree : Gree = Gree()
midea : Midea = Midea() to_cold(gree) # 输出格力cold

Python学习三天计划-3的更多相关文章

  1. Python学习三天计划-1

    一.第一个Python程序 配置好环境变量后 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python解释器的作用是 将Python代码翻译成计算机认识 ...

  2. Python学习三---序列、列表、元组

    一.序列 1.1.序列概念 pythn中最基本的数据结构是序列(sequence). 序列中每个元素被分配一个序号-元素索引,第一个索引是0,第二个是1,以此类推.类似JAVA中数组和集合中的下标. ...

  3. python学习 (三十三) Modules

    1: 方法一: 导入整个模块 import math class ModulesDemo(): def builtin_modules(self): print(math.sqrt()) m = Mo ...

  4. Python学习(三) 输出任意格式的字符串以及字符串的切片

    在Python中想要输出一句话,如下 a='hello world' print a //打印出的是hello world print 'hello \n world' //打印出的是 //hello ...

  5. Python学习(三):迭代器、生成器、装饰器、递归、算法、正则

    1.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历 ...

  6. python 学习三

    list循环删除下标会出错 L = [1,1,1,2,3,4,5]#list是根据下标来取值 #下标0,1,2,3,4,5,6 循环后下标错位 输出的结果是[1,2,4],把1也取到了 #l2 = [ ...

  7. Python学习三|列表、字典、元组、集合的特点以及类的一些定义

    此表借鉴于他人 定义 使用方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner', ...

  8. python学习 (三十一) python中的class

    1 python的类:   Python类都继承自object. __init__: 构造函数,如果不写,有一个默认的. __init__: 这个构造函数只能有一个,Python中不能有多个构造函数. ...

  9. python学习三(数据保存到文件)

    以写模式打开文件:需要指定写模式,如下所示 data = open('data.out','w') 如果文件已经存在,则会清空它现有的所有内容.要追加一个文件,需要使用访问模式a,会追加到下一行. 例 ...

随机推荐

  1. Luogu3267 [JLOI2016/SHOI2016]侦察守卫 (树形DP)

    树形DP,一脸蒙蔽.看了题解才发现它转移状态与方程真不愧神题! \(f[x][y]\)表示\(x\)的\(y\)层以下的所有点都已经覆盖完,还需要覆盖上面的\(y\)层的最小代价. \(g[x][y] ...

  2. ArrayList,LinkedList

    ArrayList,LinkedList ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将链表的数据 ...

  3. 百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12

    Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复 ...

  4. 设置 Git 用户名和邮箱

    安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址.因为每一个提交都会使用这些信息,如果你不完善它们,在 GitHub 远程仓库里很有可能没有你的贡献统计. 以下操作需要你打开 Git ...

  5. Python自动化之常用模块学习

    自动化常用模块 urllib和request模块学习笔记 '获取页面,UI自动化校验页面展示作用': #-*- coding : utf-8 -*-import urllib.requestimpor ...

  6. CobaltStrike插件编写(1)-权限维持

    自嘲:今天打开博客园一看,好家伙我竟然还有账户,原来我注册了博客园啊. CobaltStrike插件-权限维持模块 方法都是网上常见的,正好在学怎么写插件,练手之作,大佬勿喷. popup beaco ...

  7. day01-GUI坦克大战01

    JavaGUI-坦克大战 1.Java绘图坐标体系 坐标体系介绍:下图说明了一个Java坐标体系.坐标原点位于左上角,以像素为单位.在Java坐标体系中,第一个是x坐标,表示当前位置为水平方向,距离坐 ...

  8. 微信小程序语音提示

    一. 老规矩, 先上demo图:  然后通过 wx.createInnerAudioContext  创建内部 audio 上下文 InnerAudioContext 对象 就能播放 filename ...

  9. Java 将Excel转为UOS

    以.uos为后缀的文件,表示Uniform Office Spreadsheet文件,是一种国产的办公文件格式,该格式以统一办公格式(UOF)创建,使用XML和压缩保存电子表格.既有的Excel表格文 ...

  10. 自定义View5 -塔防小游戏:第二篇防御塔随意放置

    第一篇:一个防御塔+多个野怪(简易版) 第二篇:防御塔随意放置 自定义View,处理事件分发,up,move,down. 第三篇:防御塔随意放置+多组野怪 第四篇:多波野怪 第五篇:杀死野怪获得金币 ...