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)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显 ...
随机推荐
- C# 动态操作 控件位置绑定 [ Anchor ] 属性
注: 1.此类属于非常用类,只因本人需要编写的...顺便刷贴一下 2.对于初学,其中的枚举使用可以为你加深一点印象 以下为操作类代码: public class AchCtrer { #region ...
- Altium Designer在原理图中复制报错InvalidParameter解决
Altium Designer 原理图复制出现 InvalidParameter Exception Occurred In Copy 解决方案为将下图红框中的√去掉 将红框中√去掉就点击右下 ...
- C# IDataReader转换为Json
1 /// <summary> 2 /// IDataReader转换为Json 3 /// </summary> 4 /// <param name="dat ...
- .Netcore webApi 注入socket 与客户端交互
模拟服务端 private string TcpServiceControl(string value) { // 1.按照模拟工具上看 先new一个tcp服务 Socket serverSocket ...
- VScode好用插件
1.Anaconda Extension Pack 可以自动补全anaconda包中的属性名称 2.Code Spell Checker 单词拼写检查,非常推荐,有时候会拼错单词,这个不仅可以指出错误 ...
- K8S 性能优化 - 大型集群 CIDR 配置
前言 K8S 性能优化系列文章,本文为第三篇:Kubernetes 大型集群 CIDR 配置最佳实践. 系列文章: <K8S 性能优化 - OS sysctl 调优> <K8S 性能 ...
- 网络基础-OSI七层模型
什么是OSI模型 OSI模型(或 Open Systems Interconnection Model开放系统互连模型)是网络中使用的绝对基础模型.这个关键模型提供了一个框架,规定所有联网设备将如何发 ...
- MD5 简介 以及 C# 和 js 实现【加密知多少系列】
〇.简介 MD5 是哈希算法(散列算法)的一种应用.Hash 算法虽然被称为算法,但实际上它更像是一种思想.Hash 算法没有一个固定的公式,只要符合散列思想的算法都可以被称为是 Hash 算法. 算 ...
- Firefox、Edge下无法使用jQuery的css("margin")、css("padding”)和css("border")获取值
今天遇到了浏览器的迷惑行为,在Edge上使用jQuery的css("margin")获取值,发现获取的是空值,换了Firefox也是如此.看了jquery官方原话,发现如下一段话R ...
- Flink基本概念及架构
1.基本概念 无界和有界数据.任何类型的数据都可以形成一种事件流.信用卡交易.传感器测量.机器日志.网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流.数据可以被作为 无界 或者 有界 流来 ...