面向对象 Object Oriented

概述

面向过程

1.分析出解决问题的步骤,然后逐步实现。
例如:婚礼筹办

– 发请柬(选照片、措词、制作)

– 宴席(场地、找厨师、准备桌椅餐具、计划菜品、购买食材)

– 婚礼仪式(定婚礼仪式流程、请主持人)

2.公式:程序 = 算法 + 数据结构
3.优点:所有环节、细节自己掌控。
4.缺点:考虑所有细节,工作量大。

面向对象

1.找出解决问题的人,然后分配职责。
例如:婚礼筹办

– 发请柬:找摄影公司(拍照片、制作请柬)

– 宴席:找酒店(告诉对方标准、数量、挑选菜品)

– 婚礼仪式:找婚庆公司(对方提供司仪、制定流程、提供设备、帮助执行)

2.公式:程序 = 对象 + 交互
3.优点
(1)思想层面:
– 可模拟现实情景,更接近于人类思维。

– 有利于梳理归纳、分析解决问题。

(2)技术层面:
– 高复用:对重复的代码进行封装,提高开发效率。

– 高扩展:增加新的功能,不修改以前的代码。

– 高维护:代码可读性好,逻辑清晰,结构规整。

4.缺点:学习曲线陡峭。

类和对象

1.类:一个抽象的概念,即生活中的”类别”。
2.对象:类的具体实例,即归属于某个类别的”个体”。
3.类是创建对象的”模板”。
– 数据成员:名词类型的状态。

– 方法成员:动词类型的行为。

4.类与类行为不同,对象与对象数据不同。

语法
定义类
1.代码

class 类名:“””文档说明”””def _init_(self,参数列表):self.实例变量 = 参数
方法成员

2.说明

 -- 类名所有单词首字母大写.--  _init_ 也叫构造函数,创建对象时被调用,也可以省略。--  self 变量绑定的是被创建的对象,名称可以随意。

创建对象(实例化)

变量 = 类名(参数列表)

实例成员
实例变量

1.语法
(1)定义:对象.变量名
(2)调用:对象.变量名
2.说明
(1)首次通过对象赋值为创建,再次赋值为修改.

 w01 = Wife()w01.name = “丽丽”w01.name = “莉莉”

(2)通常在构造函数(init)中创建。

 w01 = Wife(“丽丽”,24)print(w01.name)

(3)每个对象存储一份,通过对象地址访问。
3.作用:描述某个对象的数据。
4.dict:对象的属性,用于存储自身实例变量的字典。

"""实例成员字面意思:对象(具体)的 变量 与 方法实例变量:自己的数据价值:每个对象都有一份创建:对象.变量名 = 数据使用:对象.变量名实例方法:操作实例变量创建:def 方法名(self,参数)方法体使用:对象.方法名(参数)
"""
class Wife:def __init__(self, name):self.name = namedef print_self(self):print("我是:", self.name)
w01 = Wife("丽丽")  # dict01 = {"name":"丽丽"}
w01.name = "莉莉"  # dict01["name"] = "莉莉"
print(w01.name)  # print(dict01["name"])
w01.print_self()
print(w01.__dict__)  # {"name":"丽丽"}# 支持动态创建类成员
# 类中的成员应该由类的创造者决定
class Wife:pass
w01 = Wife()
w01.name = "莉莉"
print(w01.name)#对象.变量名# 实例变量的创建要在构造函数中__init__
class Wife:def set_name(self,name):self.name = name
w01 = Wife()
w01.set_name("丽丽")
print(w01.name)

实例方法

1.语法
(1) 定义:

 def 方法名称(self, 参数列表):方法体

(2) 调用:对象地址.实例方法名(参数列表)

   不建议通过类名访问实例方法

2.说明
(1) 至少有一个形参,第一个参数绑定调用这个方法的对象,一般命名为"self"。
(2) 无论创建多少对象,方法只有一份,并且被所有对象共享。
3.作用:表示对象行为。
类成员

"""类成员类变量:大家的数据创建:在类中,方法外变量名 = 数据使用:通过类名访问类名.变量名类方法:操作类变量创建:@classmethoddef 方法名(cls,参数):方法体使用:通过类名访问类名.方法名(参数)
"""
class ICBC:"""工商银行"""# 类变量:总行的钱total_money = 1000000# 类方法:操作类变量@classmethoddef print_total_money(cls):# print("总行的钱:", ICBC.total_money)print("总行的钱:", cls.total_money)def __init__(self, money=0):# 实例变量:支行的钱self.money = money# 总行的钱因为创建一家支行而减少ICBC.total_money -= money
ttzh = ICBC(100000)
trtzh = ICBC(200000)
# print("总行的钱:", ICBC.total_money)
ICBC.print_total_money()


类变量

1.语法
(1)定义:在类中,方法外定义变量。

class 类名:变量名 = 表达式

(2)调用:类名.变量名
不建议通过对象访问类变量

2.说明
(1) 存储在类中。
(2) 只有一份,被所有对象共享。
3.作用:描述所有对象的共有数据。

"""总结 - Python语言变量
"""
a = 10  # 全局变量:定义在文件中,整个文件可用
def func01():b = 20  # 局部变量:定义在函数中,整个函数可用
class MyClass:d = 40  # 类变量:定义在类中,通过类访问def __init__(self):self.c = 30  # 实例变量:定义在构造函数中,通过对象访问
"""私有化作用:类外无法访问做法:以双下划线命名   __data本质:障眼法单下划线+类名+私有变量名字 _MyClass__data
"""
class MyClass:def __init__(self, data):self.__data = datadef __func01(self):print("func01执行了")
m01 = MyClass(10)
# print(m01.__data)
# print(m01._MyClass__data)
print(m01.__dict__)
# m01.__func01()
# m01._MyClass__func01()"""属性
"""
# 需求:保障数据(年龄)在有效范围内(30-60)
class Wife:def __init__(self, name="", age=0):self.name = nameself.age = age
w01 = Wife("双儿", 9999999999999)
print(w01.name)
print(w01.age)# 注意:
# 1. 属性名与实例变量名相同
# 2. 属性操作私有变量class Wife:def __init__(self, name="", age=0):self.name = nameself.age = age@property # age = property(age)def age(self):return self.__age@age.setter # age = age.setter(age)def age(self, value):if 30 <= value <= 60:self.__age = valueelse:raise Exception("我不要")
w01 = Wife("双儿", 59)
w01.age = 31
print(w01.name)
print(w01.age)"""属性原理目标:保护实例变量理念:拦截对变量的操作,改为对方法的调用.一个属性对象,包装了两个方法(负责读取 负责写入).
"""
class Wife:def __init__(self, name="", age=0):self.name = nameself.age = age# self.set_age(age)def get_age(self):return self.__agedef set_age(self, value):if 30 <= value <= 60:self.__age = valueelse:raise Exception("我不要")# @property 原理如下age = property(get_age)# age.setter 原理如下age = age.setter(set_age)
w01 = Wife("双儿", 59)
w01.age = 300
print(w01.name)
print(w01.age)"""属性各种写法
"""# 写法1:读写属性
# 快捷键:props + 回车
class MyClass:def __init__(self,data):self.data = data@propertydef data(self):return self.__data@data.setterdef data(self, value):self.__data = value
m01 = MyClass(10)
print(m01.data)# 写法2:只读属性
# 适用性:类中确定的数据,类外只能读取,不能修改
# 快捷键:prop + 回车
class MyClass:def __init__(self):self.__data = 10@propertydef data(self):return self.__data
m01 = MyClass()
# m01.data = 20# AttributeError: can't set attribute
print(m01.data)# *写法3:只写属性
class MyClass:def __init__(self, data):self.data = data# data = property()# @data.setter# def data(self, value):#     self.__data = valuedef data(self, value):self.__data = valuedata = property(fset=data)
m01 = MyClass(10)
print(m01.data)  # AttributeError: unreadable attribute
m01.data = 20
print(m01.__dict__)

类方法

1.语法
(1)定义:

    @classmethoddef 方法名称(cls,参数列表):方法体

(2)调用:

     类名.方法名(参数列表) 不建议通过对象访问类方法

2.说明
(1) 至少有一个形参,第一个形参用于绑定类,一般命名为’cls’

(2) 使用@classmethod修饰的目的是调用类方法时可以隐式传递类。

(3) 类方法中不能访问实例成员,实例方法中可以访问类成员。

3.作用:操作类变量。

静态方法

1.语法
(1)定义:

         @staticmethoddef 方法名称(参数列表):方法体

(2)调用:类名.方法名(参数列表)
不建议通过对象访问静态方法

2.说明
(1) 使用@ staticmethod修饰的目的是该方法不需要隐式传参数。

(2) 静态方法不能访问实例成员和类成员

3.作用:定义常用的工具函数。

Python小白学习笔记六 (面向对象 1 )相关推荐

  1. Python小白学习笔记-day5

    第五章-Python函数和代码复用-学习笔记 如果函数没有返回值,则其调用后类型为无类型. def func():print('1') 则type(func)类型为function,type(func ...

  2. 简明Python教程学习笔记_6_面向对象编程

    面向对象编程:https://www.liaoxuefeng.com/wiki/897692888725344/923030496738368 面向对象高级编程:https://www.liaoxue ...

  3. Programming Computer Vision with Python (学习笔记六)

    边缘检测(edge detection)是最重要的图像处理技术之一,图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性,为后续图像理解方法提供了基础. 边缘检测 ...

  4. header python 环境信息_python获取网页header头部信息(python小白学习笔记二)

    方法一:代码查看 通过python获取网页的链接url,返回码,以及相关的信息 #对反爬虫网页,可以设置一些headers信息,模拟成浏览器取访问网站 import urllib.request ur ...

  5. python数据挖掘学习笔记】十六.逻辑回归LogisticRegression分析鸢尾花数据

    但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法 #2018-03-28 16:57:56 March Wednesday ...

  6. python tensorflow学习笔记(六)最小二乘法

    说明:本文不包括TensorFlow相关内容 概念 概念:回归分析 回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法.运用十分广泛,回归 ...

  7. Python学习笔记六——画小猪佩奇

    目录 Python学习笔记六--画小猪佩奇 画布 画笔 属性设置 操纵命令 运动命令 画笔控制命令 全局控制命令 其他命令 Python学习笔记六--画小猪佩奇 使用Python的turtle库可以绘 ...

  8. Java学习笔记 六、面向对象编程中级部分

    Java学习笔记 六.面向对象编程中级部分 包 包的注意事项和使用细节 访问修饰符 访问修饰符的注意事项和使用细节 面向对象编程三大特征 封装 封装的实现步骤(三步) 继承 继承的细节问题 继承的本质 ...

  9. Python基础学习笔记之(一)

    Python基础学习笔记之(一) zouxy09@qq.com http://blog.csdn.net/zouxy09 前段时间参加微软的windows Azure云计算的一个小培训,其中Pytho ...

最新文章

  1. 赠书:一本书揭开 Spring Boot 技术内幕
  2. Python标准库02 时间与日期 (time, datetime包)
  3. Hadoop将死,图数据库成为新趋势!
  4. HTML 5.2 新特性介绍
  5. freetds 移植
  6. 大数据技术之kafka (第 3 章 Kafka 架构深入 ) 高效读写数据
  7. 全排列 流程图_[分享]给排水工程全流程施工详解,看看精品工程是怎样施工的!...
  8. 盒子浮动的重要性及对其它元素的影响
  9. windows 系统删除服务命令 sc delete 服务名称
  10. matlab3阶幺矩阵,Matlab操作矩阵的相关方法
  11. c++ 15个语言特性,C++11/14的新特性(更简洁)
  12. 有什么数学题库软件吗?4款学生必备APP,题库超全超好用!
  13. 27_Pandas按星期,月份,季度和年份的天计算时间序列数据的总计和平均值
  14. 因为星期三有计算机课的英语,34  (五年级上册)第二单元 我星期里的每天--英汉对...
  15. 《密码法》之商用密码应用安全性评估----六问
  16. excel取消保存微软_如何使用Microsoft的“ Excel中的资金”功能管理您的个人财务...
  17. IT行业的几大发展趋势
  18. HR吐槽某博士程序员:简历写了12页,是不是读书读傻了
  19. 2021年,薪酬最高的5种编程语言
  20. 微软 Windows 10 1909 十月更新官方 ISO 镜像

热门文章

  1. 菜鸟学编程必须养成的十大好习惯
  2. 好看不过AR,好玩不过IP营销,不能颠覆产品那就颠覆创意
  3. 【基础篇】Kotlin第四讲-类、对象和接口
  4. 【题解】CF923A:Primal Sport
  5. iNFTnews | 当医学和元宇宙发生碰撞时,会怎样?
  6. 通过Keepalived实现Redis Failover自动故障切换功能(整理中) .
  7. linux 运行ctl文件_linux journalctl 命令
  8. 一行修改网页内容的代码
  9. 麻将听牌的算法(java)
  10. 贵阳python培训