Python OOP面向对象编程
OOP
思想:
- 以模块思想解决工程问题
- 面向过程 VS 面向对象
- 由面向过程转向面向对象
- 例子,我要开一个学校,叫XXX
- 讲师
- 学生
- 班主任
- 教室
- 学校
常用名词
- OO:面向对象
- OOA: 分析
- OOD:设计
- OOP:编程
- OOI:实现
- OOA -> OOD ->OOI
类 VS 对象
- 类:抽象,描述的是一个集合,侧重于共性
- 对象:具象,描述的是个体
类的内容:
- 动作,函数
- 属性,变量
is-a
定义类:class关键字
类命名:
- 遵循大驼峰
- 第一个字母大写
## 定义学生类,和几个学生
class Student():
# 此处定义一个空类
# passs是关键字,表示占位用的,无意义
pass
class StudnetNoPass():
pass
# 定义一个对象
xxxxxbai = Student()
#
class PythonStudent():
name = "yegeli"
age = 18
course = "Python"
'''
定义类中的函数
一般需要有self关键字
其余跟普通函数基本相同
'''
def giveMeMOney(self):
print("Show me the money")
return None
xiaobai = PythonStudent()
print(xiaobai.name)
print(xiaobai.age)
print(xiaobai.course)
yegeli
18
Python
类的属性
# 类的例子
# 注意类的定义
class Student():
# name,age是类的变量
# 注意类的变量的定义位置和方法
# 不需要前缀
name = "野哥李"
age =19
# 类的实例方法
def sayHi(self):
print("类,动作")
return None
# self可以更换名字
def sayHai(meme):
print("爱咪咪")
# 实例化
# 中文能当做变量名称
野哥 = Student()
print(野哥)
print(野哥.name)
<__main__.Student object at 0x0199ADB0>
野哥李
self
- self可以用别的名称代替
- self不是关键字
- 作用是指代本身
# self举例
# 实例调用函数
yaoyao = Student()
# 让yaoyao跟我打声招呼
# 因为默认实例作为第一个参数传入
yaoyao.sayHi()
# 错误的案例
a = "三钠"
yaoyao.sayHi(a)
类,动作
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-36-a7e3277fa362> in <module>()
8 # 错误的案例
9 a = "三钠"
---> 10 yaoyao.sayHi(a)
TypeError: sayHi() takes 1 positional argument but 2 were given
# 参看sayHai的定义,说明self的名称可更改
yaoyao.sayHai()
爱咪咪
类的变量作用域的问题
- 类变量:属于类自己的变量
- 实例变量:属于实例的变量
- 访问实例的属性,如果实例没有定义属性,则自动访问类的属性,如果类也没有定义,报错
# 注意类的定义
class Student():
# name,age是类的变量
# 注意类的变量的定义位置和方法
# 不需要前缀
name = "野哥李"
age =19
def sayHi(self):
print("My name is {}, i am {} years old".format(self.name,self.age))
return None
# 以下案例说明,实例变量可以借用类的变量
erjing = Student()
erjing.sayHi()
My name is 野哥李, i am 19 years old
# 注意类的定义
class Student2():
# name,age是类的变量
# 注意类的变量的定义位置和方法
# 不需要前缀
name = "野哥李"
age =19
def sayHi(self, n, a):
self.name = n
self.age = a
print("My name is {}, i am {} years old".format(self.name,self.age))
return None
# 以下案例说明,实例变量可以借用类的变量
erjing = Student2()
# 注意观察下面语句打开和关闭后的区别
erjing.sayHi("erjing", 17)
print("My name is {}, i am {} years old".format(Student2.name,Student2.age))
print("My name is {}, i am {} years old".format(erjing.name,erjing.age))
# 如果访问实例的属性没有定义,则自动访问类的属性
# 如果类也没有定义,报错
print(ering.father)
My name is erjing, i am 17 years old
My name is 野哥李, i am 19 years old
My name is erjing, i am 17 years old
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-d8fc2922a91b> in <module>()
21 # 如果访问实例的属性没有定义,则自动访问类的属性
22 # 如果类也没有定义,报错
---> 23 print(ering.father)
NameError: name 'ering' is not defined
访问类的属性
- 在类里面如果强制访问类的属性,则需要使用 class ,(注意前后两个下划线)
- 类方法:
定义类的方法的时候,没有self参数
类的方法中只允许用类的内容
两种用法
ClassName :类名
__class__:两个下划线class两个下划线
class Student():
# name,age是类的变量
# 注意类的变量的定义位置和方法
# 不需要前缀
name = "野哥李"
age =19
# sayHi是实例传参的方法,它有默认的传参self,把实例传进来
def sayHi(self):
print("My name is {}, i am {} years old".format(self.name,self.age))
return None
# sos是类的方法,它不把实例传进来
# 调用需要用到特殊的方法
def sos():
# 方法中不允许访问实例的任何内容
# 如果访问类的内容,注意两种方法,类名及两个下划线class两个下划线
print("My name is {}, i am {} years old".format(Student.name,__class__.age))
return None
# 体验类的方法
s = Student()
s.sayHi()
# 调用类方法的例子
# 直接用类的名称调用
Student.sos()
# 类的方法与实例传参的方法对比:
s.sos()
My name is 野哥李, i am 19 years old
My name is 野哥李, i am 19 years old
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-0b52ebf4caa5> in <module>()
6 Student.sos()
7
----> 8 s.sos()
TypeError: sos() takes 0 positional arguments but 1 was given
构造函数
- 类在实例化的时候,执行一些基础性的初始化工作
- 使用特殊的名称和写法
- 在实例化的时候自动执行
- 是在实例化的时候第一个被执行的函数
# 注意类的定义
class Student():
name = "NoName"
age = 0
# 构造函数名称固定,写法相对固定
def __init__(self):
print("我是构造函数")
erjing = Student()
print("-------------")
print(erjing.name)
print(erjing.age)
我是构造函数
-------------
NoName
0
Python OOP面向对象编程的更多相关文章
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python之面向对象编程学习
不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...
- Python:面向对象编程3 定制类(有更新)
Python:面向对象编程3 定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- python之面向对象编程
1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...
- Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
- Python(面向对象编程—1)
class tst: l=[] x=1 a=tst() b=tst() a.l.append('a') b.l.append('b') a.x='a' b.x='b' print(a.l,a.x) # ...
- 一文看懂Python的面向对象编程
之前在网络上看了很多关于面向对象的编程详解,还是不够过瘾,所以决定自己动手写一篇. 面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计. 类(Class) ...
- Python设计模式面向对象编程
前言 本篇文章是基于极客时间王争的<设计模式之美>做的总结和自己的理解. 说到面向对象编程,作为一个合格的Pythoner,可以说信手拈来.毕竟在Python里"万物都是对 ...
- Java实现OOP(面向对象编程)
一.对象的综述 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显 ...
随机推荐
- Linux 提示符后面显示全路径
vi /root/.bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' a ...
- 更新Vue-cli4与Eslint插件自动保存
Vue-cli更新 此更新为Vue-cli3更新为4,可使用node来查看本机的安装版本,vue -V,此版本(cli4)需要node v8.9 或更高版本 (推荐 v10 以上),查看node版本可 ...
- 思考20230208-关于chatGPT
最近的ChatGPT火了,我今天FQ.充了1 USD买了个虚拟手机号创建了openAI 的账号,试了一把,它的表现令我叹为观止.他已经不再是简单的基于海量数据在网络上搜索已有的答案,而是会根据用户的想 ...
- 复制文本到粘贴板 (vue3)(兼容ios)
// 点击复制到剪贴板 const copyToClipboard = (content)=> { if (window.clipboardData) { window.clipboardDat ...
- Oracle入门- 数据库操作相关脚本
1. 创建表 1 CREATE TABLE SYS_NOTICE 2 ( 3 GUID CHAR(32) NOT NULL, 4 TITLE VARCHAR2(128) NOT NULL 5 ); 6 ...
- P3128 [USACO15DEC]Max Flow P(树上倍增和树链剖分)
思路1(树上倍增$ + $树上差分) 每次都修改一条从\(u\)到\(v\),不就是树上差分的专门操作吗?? 直接用倍增求\(LCA\),每次\(d[u]++,d[v]++,d[LCA(u,v)]-- ...
- ffmpeg的常用参数
-encoders 查看支持的编码器 Intel处理器的核心显卡支持的编码器带有qsv后缀(Intel quick sync video acceleration) NVIDIA独立显卡 ...
- 看图就会-网络攻击 (xss和csrf)
最近发现好多东西整理过后就没啥印象,但是思维导图很好用,能取其精华去其糟粕
- SimpleITK和nibable读取nii文件
import SimpleITK as sitk path = 'nii全路径' nii_obj = sitk.GetArrayFromImage(sitk.ReadImage(path)) #sha ...
- 利用SpringBoot实现数据库的增删改查(具体实现)
前言 本次主要是想利用SpringBoot的框架实现一下数据库的增删改查,所以只有一个较为简单的表作为案例 具体实现 1.在配置文件中配置一下相关内容 2.在pom.xml文件中导入相关坐标 3.编写 ...