【常见概念简介】

  • 类(class)—— 用来描述某些具有相同属性和方法的对象的集合。格式如下

    class test():
    class_variable
    ...

    def f(self,*arg,**args):
    statement
    ...
  • 类方法 ———— 类中定义的函数(跟普通函数的唯一区别就是:类方法的第一个参数必须是实例/对象自己,习惯上常用self表示(当然,如果你看不顺眼也可以使用其他字符串代替,使用self只是pythonic的习惯而已)。见上方示例)  
  • 类变量 ———— 定义在类中、类方法外,在该类的所有实例间共享。一般情况下建议使用“class.variable”形式访问。
  • 实例变量 ——— 定义在类方法中,且以“self.variable”形式出现。各实例间独享、互不影响。
  • 继承 ————— 一个派生类继承基类的变量和方法,基类可以是单个类也可以有多个类(多个类继承时,按照继承顺序从左到右继承(多个类有相同的变量/方法时以左侧最先匹配到的父类为准))
  • 重载 ————— 又叫“方法重写”:当继承的父类的方法不能完全满足子类需要的时候,一般会在子类中重新定义一个同名方法。

【典型问题剖析】

  类变量 vs 实例变量:

    '''
从代码的可读性、可维护性、易理解等角度出发,建议:
类变量————使用“Class.Variable”形式读取、修改
实例变量————使用“instance.Variable”形式读取、修改

否则,代码结构不易维护、执行结果不易理解
'''

  1)按上述建议访问类变量,代码逻辑清晰、执行结果一目了然:

    代码:

class Person:
name = 'Hello '
print(name,'\t'*2,id(name)) def changeName(self):
Person.name += 'Python' #按照建议的规范访问并修改类变量,结果:二种方式读取到的内容一致,没有歧义
print(self.name,'\t',id(self.name))
print(Person.name,'\t',id(Person.name)) p = Person()
p.changeName()

    执行结果:

Hello           1695645322992
Hello Python 1695645419888
Hello Python 1695645419888
Process finished with exit code 0

  2)不遵守上述规范,代码不一定会报错,但执行结果不可控,不利于代码的维护和逻辑理解:

    代码:

class Person:
name = 'Hello '
print(name,'\t'*2,id(name)) def changeName(self):
self.name += 'Python' #不按照建议的规范访问并修改类变量,结果:二种方式读取到的内容一致,没有歧义
print(self.name,'\t',id(self.name))
print(Person.name,'\t',id(Person.name)) p = Person()
p.changeName()

    执行结果:

Hello           2145404866288
Hello Python 2145404963184
Hello 2145404866288
Process finished with exit code 0

Python的面向对象常见概念解析的更多相关文章

  1. Python中面向对象的概念(科普)

    面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...

  2. python 中面向对象的概念

    原文 域和作用空间 本地域,函数域(nonlocal)和 全局域(global) def scope_test(): def do_local(): spam = "local spam&q ...

  3. Python中面向对象的概念

    1.语言的分类 1)面向机器 抽象成机器指令,机器容易理解.代表:汇编语言. 2)面向过程 做一件事,排除步骤,第一步做什么,第二步做什么,如果出现A问题,做什么处理,出现b问题,做什么处理.问题规模 ...

  4. python基础---面向对象的概念

    1.面向对象 什么是面向过程?? 将一个复杂单位问题一步步小化,最终只需要完成一个人小的功能就可以了 比如:将大象放进冰箱要几步? 一共三步:打开冰箱,把大象塞进入,关门就可以了 优点:复杂度降低了, ...

  5. Python -面向对象(一 基本概念)

    一 Python简单介绍 Python是一个可移植的面向对象的脚本语言. Python尽管是一个脚本语言,但也是一个全然面向对象的语言.由于它设计之初把易用性做为很重要的一个考量标准,所以用起来很简洁 ...

  6. python中面向对象_类_对象的概念与定义

    1. 面向对象的概念,面向对象是一种编程思想. 是对现实世界中一类事物的抽象,在编程中可以理解为是一种建立现实世界事物的模型 2.  面向对象和面向过程的区别: 面向过程关注的是完成工作的步骤. 面向 ...

  7. Python面向对象之面向对象基本概念

    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果:函数不仅能执行,还能返回结果. 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实 ...

  8. python面向对象基本概念(OOP)

    面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...

  9. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...

随机推荐

  1. android studio 使用 aidl(二)异步回调

    基础使用请移步 android studio 使用 aidl (一) 首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 // IT ...

  2. 双向链表——Java实现

    双向链表 链表是是一种重要的数据结构,有单链表和双向链表之分:本文我将重点阐述不带头结点的双向链表: 不带头结点的带链表 我将对双链表的增加和删除元素操作进行如下解析 1.增加元素(采用尾插法) (1 ...

  3. [学习总结]8、android 自定义控件 使用declare-styleable进行配置属性(源码角度)

    declare-styleable:declare-styleable是给自定义控件添加自定义属性用的. 官方的相关内部控件的配置属性文档:http://developer.android.com/r ...

  4. springboot热部署与监控

    一.热部署 添加依赖+Ctrl+F9 <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  5. 3.3 GO字符串处理

    strings方法 index 判断子字符串或字符在父字符串中出现的位置(索引)Index 返回字符串 str 在字符串 s 中的索引( str 的第一个字符的索引),-1 表示字符串 s 不包含字符 ...

  6. 解决git push报错error: failed to push some refs to 的问题

    这个问题发生的背景一般是: 想把自己本地的某个项目关联到远程仓库并推送上去,接着他会做如下操作: 本地项目->远程创建仓库->本地关联远程->推送最新代码 最后一个步骤发生问题: 那 ...

  7. 那些年采的python的坑

    1:使用virtualenvwrapper 新建虚拟环境时出现的错误 OSError: Command D:\file\python\virtu...r\Scripts\python.exe - se ...

  8. Linux目录结构和基础命令

    Linux目录和基础命令 目录 Linux目录和基础命令 1 Linux目录结构 1.1 Linux文件名命令要求 1.2 文件的类型 2. 基础命令 2.1 ls 2.2 cd和pwd 2.3 命令 ...

  9. c++和c中const的区别

    const在c与c++的区别与使用 大学期间对c和c++的了解太少了,现在工作了导致自己来恶补,简单的const关键字里面的学问还是挺大的,越是基础的知识越是容易忘却,所以今天开始记录着自己每一天的学 ...

  10. 采集 base64 编码的图片

    问题 爬虫抓取网页的时候,遇到有的图片是 base64 编码的格式,要怎样下载到本地呢? 示例:base64 编码的 img 标签 <!-- 内容太长省略一部分 --> <img s ...