目录

目录

前言

在此之前,我们以前写的编程,都是面向过程的编程,今儿起,我们开始学习一类编程的思想,也是相对面向过程更高级的思想,面向对象编程。

(一)基本概念

1.面向过程与面向对象

(1)面向过程

侧重任务的规划,关心每一个步骤,并且自己一一实现。

相当于施工者。

(2)面向对象

侧重的是谁能做,然后派人去做,而不是自己去做,自己作为宏观调控,管理者。

相当于包工头。

(3)面向过程与面向对象的关系

共同点:

都是解决问题的一种思路,办法。

不同点:

面向对象其实就面向过程的一个封装,面向对象里面具体实施,也是要到面向过程来实现的。

2.类与对象

(1)类的概念

类是由事物抽象出来的一个模板,这个模板可以创建其他的对象。

像人类也是一个类,小猫小狗是动物类。

python是一门彻底的编程语言,在python一切都是对象。

类下面有两个特征名称:

  1. 属性:静态的特征值
  2. 方法:动态的行为

(2)对象的概念

对象是指具体的事物,万物皆对象。

像张三这个人,是具体一个人,就是一个对象。

(3)类与对象的关系

类是由某一对象抽象出来的模板,对象又是类创建出来的。类起到模板的作用,对象才是具体的事物。

类创建对象的过程就是实例化。

(二)类属性的相关操作

1.定义一个经典类

(1)说明:

在python里实现类的定义语法是:

class 类名:

​ 属性

​ 方法

(2)源代码:

# 定义一个经典类
class Money:
pass # 实例化(创建)一个对象,命名规范是:类的首个大小字母是大小。
one = Money()
print("类是:", Money)
print("对象是:", one) # 类的一些共有属组
print("类的名称是", Money.__name__) # 类名可以是变量
xxx = Money
Money = 666
print(xxx)
print(Money) # 对象的共有属性
print(one.__class__)

(3)输出效果:

2.对象属性的操作

(1)说明:

对象.变量名 相对于 一个变量。可以通过对象.变量名来访问。

(2)源代码:

# 1.定义一个经典类
class Person:
pass # 2.实例化(创建)一个对象
one = Person() # 3.给对象增加属性
one.age = 18
one.height = 180
print(one.age, id(one.age)) # 3.1返回对象的所有属性
print(one.__dict__) # 4.修改对象的属性,其实就是把:one.age当作一个变量来处理就可以了。
one.age = 20
print(one.age, id(one.age)) # 5.删除对象的属性
del one.age
print(one.age)

(3)输出效果:

3.类属性的操作

(1)说明:

class Person:

# 直接定义变量,就是类的属性

age = 21

height = 175

(2)源代码:

# 1.类也是一个对象,基类的对象
class Person:
# 直接定义变量,就是类的属性
age = 21
height = 175 # 2.实例化(创建)一个对象
one = Person()
print(one.age)
print(one.height) # 3.查看类与实例的属性
print(Person.__dict__)
print(one.__dict__)

(3)输出效果:

4.限制对象属性

(1)说明:

有时候,我们定义的类,不希望这个类创建的对象来随意的添加属性,我们可以添加限制

用:slots = [ ]

(2)源代码:

class Person:
# 允许对象添加的属性
__slots__ = ["age"] p1 = Person()
p1.age = 18
# 添加非法属性
p1.height = 178
print(p1.age)
print(p1.height)

(3)输出效果:

(三)类方法的相关操作

1.类方法的分类

(1)说明:

类方法分为三类,其主要的区分是第一个参数的含义,和特定的装饰器来区分。

  1. 实例方法:第一个参数是self,无装饰器。
  2. 类方法:第一个参数是:cls,使用:@classmethod 装饰器
  3. 静态方法:无第一个参数,使用:@staticmethod 装饰器

(2)源代码:

"""
方法的分类:三种方法
""" class Person:
# 定义一个是实例方法:
def object_fun(self):
print("我还一个实例方法", self) # 定义一个类方法
@classmethod
def class_fun(cls):
print("我是一个类方法", cls) # 定义一个静态方法
@staticmethod
def static_fun():
print("我是一个静态方法") one = Person()
# 调用方法
one.object_fun()
one.class_fun()
one.static_fun() print(Person.__dict__)

(3)输出效果:

2.不同类方法的使用不同属性

(1)说明:

  1. 实例方法:可以访问类属性和实例属性
  2. 类方法:只能访问类属性
  3. 静态方法:不能访问实例属性与类属性

(2)源代码:

# 定义一个类
class Person:
# 类属性
age = 18 # 定义一个是实例方法:
def object_fun(self):
print(self.age)
print(self.num) # 定义一个类方法
@classmethod
def class_fun(cls):
print(cls.age) # 定义一个静态方法
@staticmethod
def static_fun():
print("我是一个静态方法")
print(Person.age) # 实例化一个对象
one = Person()
# 实例属性
one.num = 10 # 实例方法可以访问类属性和实例属性
one.object_fun() # 类方法只能访问类属性
one.class_fun() # 静态方法不能访问实例属性与类属性
one.static_fun()

(3)输出效果:

作者:Mark

日期:2019/02/12 周二

8.1Python面向对象编程(一)的更多相关文章

  1. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  2. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  3. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  4. Delphi_09_Delphi_Object_Pascal_面向对象编程

    今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...

  5. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  6. 面向对象编程(OOP)

    什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...

  7. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  8. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  9. 进击的Python【第六章】:Python的高级应用(三)面向对象编程

    Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...

随机推荐

  1. 从零开始学 Web 之 JS 高级(三)apply与call,bind,闭包和沙箱

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  2. Spring Cloud Gateway入门

    1.什么是Spring Cloud GatewaySpring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技 ...

  3. await和async在一般处理程序中的使用

    写在前面 有个小项目,前端使用的html页面,那服务端的业务处理就采用最简单的一般处理程序了,之前一直在用,觉得一直用一种方式,确实挺蛋疼的,之前也有了解过async和await的内容.就想着自己折腾 ...

  4. thinkphp如何利用反射实现钩子方法

    ThinkPHP框架的控制器模块是如何实现 前控制器.后控制器,及如何执行带参数的方法? PHP系统自带的 ReflectionClass.ReflectionMethod 类,可以反射用户自定义类的 ...

  5. thinkphp的自动生成

    第一,在index.php里定义 define('BIND_MODULE','Admin'); //自动生成Admin目录下的结构(默认生成IndexController) define('BUILD ...

  6. Angular2入门:TypeScript的类 - 定义、继承和作用域

    一.定义和继承 二.public.private和protected

  7. 基于xlua和mvvm的unity框架

    1.框架简介 这两天在Github上发现了xlua的作者车雄生前辈开源的一个框架—XUUI,于是下载下来学习了一下.XUUI基于xlua,又借鉴了mvvm的设计概念.xlua是目前很火的unity热更 ...

  8. [AHOI2008] 紧急集合

    Description 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等 ...

  9. SQL SERVER 一个SQL语句的执行顺序

    一个SQL 语句的执行顺序 1.From (告诉程序 来自哪张表  如果是表表达式 依旧是如此顺序) 2.Where(条件筛选  谓词筛选 ) 3.Group by(分组) 4.Having(分组   ...

  10. [PHP] 数据结构-二叉树的创建PHP实现

    1.利用递归的原理,只不过在原来打印结点的地方,改成了生成结点,给结点赋值的操作if(ch=='#'){*T=NULL;}else{malloc();(*T)->data=ch;createFu ...