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)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显 ...
随机推荐
- install package within python
import os os.system("pip install numpy") import subprocess subprocess.call(['pip3', 'insta ...
- c++中的构造函数,拷贝构造函数和赋值函数
1.拷贝构造和赋值函数的区别: 1)拷贝构造函数是一个对象初始化一块内存区域,这块内存就是新对象的内存区,而赋值函数是对于一个已经被初始化的对象来进行赋值操作. 2)一般来说在数据成员包含指针对象的时 ...
- python实现简单猜数字游戏
#!/usr/bin/env python import os import random import sys import time def yanse(s): print('\033[25;31 ...
- What Are You Weighting For?
A basic strength routine can change your life Strength training isn't just about getting six-pack ab ...
- MS-08-067 windows smb服务 远程命令执行漏洞
漏洞概要 MS-08-067是Windows平台中smb服务445端口的远程代码执行漏洞 利用成功可以远程控制主机 影响范围为:windows2000.xp.server 2003.server 20 ...
- 用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程
使用声网 SDK 和 UIKit 创建视频推流应用非常简单,而且声网还有许多功能,可以提高视频通话的质量和便利性.例如,我们可以在视频通话过程中使用虚拟背景,为视频通话增添趣味性. 我们可以通过以下三 ...
- epub文件如何查看
http://epub-reader.online/# 你可以用在线的epub阅读器查看. 你可以使用本地的epub阅读器查看.如neatReader,wps. 你可以将epub转换成pdf,然后查看 ...
- 博客与AI
最近AI自动生成技术文章和答案在圈子里面引起了很大轰动,Stack Overflow暂时拒绝接收GPT生成的结果.我也经常性地浏览或者编写博客,但是最近我使用new bing或者ChatGPT的过程中 ...
- HDFS写操作(简单源码解读)
HDFS最重要的就是写流程了,学校老师教的时候也是重点介绍这个过程(虽然我并没有在任何面试中被问到过).下面从画图和文字两个过程介绍写流程,这次读了源代码之后对整个过程更加清晰了. 一.图解 二.文字 ...
- 数仓如何进行表级控制analyze?
摘要: 介绍如何设置采样大小和表级控制analyze. 本文分享自华为云社区<GaussDB(DWS) 如何表级控制analyze>,作者:leapdb. 一.控制采样大小 [设置全局采样 ...