面向对象主要有三个特征:封装,继承,多态度。

一.封装

定义类语

class Animal():

class为定义类的关键字,后面跟名字():

python命名规范建议:类一般首字母单词大写,属性变量,函数首单词字母小写

定义一个类叫Animal,相关代码:
class Animal():
##类里定义的属性称为类属性
count=0
##构造函数,实例化的时候会自动调用该函数
def __init__(self,name,age,sex):
##构造函数里定义的字段称为实例属性
self.name=name
self.age=age
self.sex=sex print('名字叫:'+self.name+',年龄'+str(self.age)+'岁,性别品种是:'+self.sex)
print('当前动物数量:'+str(self.__class__.count)) if __name__ == '__main__':
##实例化Animal
a1=Animal('狮子',2,'公')

这里name,age,sex为实例属性,通过类在实例化的时候赋值,count为类属性,可通过类名.属性名的方式赋值

上面代码运行结果:

这里来改写下代码,在构造函数里加上代码:

self.__class__.count+=1

运行结果:

1.1类属性和类实例属性

这里发现类属性count字段存储的数据是全局,每次实例化对象的时候值都是在之前基础上相加,而没有被销毁。

类属性和类实例属性最大的区别就是:

类属性字段的值不会因为类的实例化而丢失,是全局保存的

类实例属性:只有每次实例化类对象赋值的时候才有值,不是全局保存的。

查看解释器里生成的雷属性代码;类名.__dict__

1.2类函数

语法: def detail_info(self):

def 后面跟函数名称,self为必须函数,这里也可能用别的名称,但为了命名统一,这里推荐用self

改写后方法:

实例化对象可直接调用

1.3,私有属性,函数

在Java和c#里私有,公有都用private,public表示,但在python里没有这两个关键字,python里在属性或者函数名加__表示私有,则只能在类的内部访问,其他地方则无法访问

将函数detail_info改为私有私有函数

运行结果

发现这里提示找不到__detail_info函数,这里就表示私有函数起作用了

实例方法

定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

调用:只能由实例对象调用。

类方法

定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

调用:实例对象和类对象都可以调用。

静态方法

定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

二。继承

python里支持单根继承,多继承

相关语法

super为关键字,调用父类构造函数。

python3之面向对象编程理解的更多相关文章

  1. JavaScript 面向对象编程 · 理解对象

    前言:      在我们深入 面向对象编程之前 ,让我们先理解一下Javascript的 对象(Object),我们可以把ECMAScript对象想象成散列表,其值无非就是一组名值对,其中值可以是数据 ...

  2. Python3基础(6)面向对象编程、异常处理

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

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

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

  4. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

  5. 深入理解Javascript面向对象编程

    深入理解Javascript面向对象编程 阅读目录 一:理解构造函数原型(prototype)机制 二:理解原型域链的概念 三:理解原型继承机制 四:理解使用类继承(继承的更好的方案) 五:建议使用封 ...

  6. 从一些简单代码实例彻底理解面向对象编程思想|OOP本质是什么?

    从Rob Pike 的 Google+上的一个推看到了一篇叫<Understanding Object Oriented Programming>的文章,我先把这篇文章简述一下,然后再说说 ...

  7. 04面向对象编程-01-创建对象 和 原型理解(prototype、__proto__)

    1.JS中对象的"不同":原型概念 从Java中我们可以很好地去理解 "类" 和 "实例" 两个概念,可是在JavaScript中,这个概念 ...

  8. Java 雇员管理小练习(理解面向对象编程)

    在学习集合框架的时候,初学者很容易练习到学生管理系统.雇员管理体统等练习题.在学习集合框架之前,基本上Java基本语法都学完了,集合框架也从侧面的检验对前面学习的理解.下面用一个曾经做过的练习题,回顾 ...

  9. Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)

    一.面向对象编程几个特征(封装, 继承,多态) 1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用. 2.继承:子类可以继承父类的方法和属 ...

随机推荐

  1. ES6深入浅出-9 Promise-2.Promise的用法

    回调是不需要return 就可以传递数据.缺点就是嵌套多了就成了回调地狱 回调的另外一个问题拿不准应该怎么去传这个参数.以为node.js为例.nodejs有个readFile去读取文件,读取成功就用 ...

  2. yii2 HeadersAlreadySentException 报错 解决方案

    报错如下: An Error occurred while handling another error: exception  Stack trace: # /xxxx/xxxx/vendor/yi ...

  3. PAT 甲级 1147 Heaps (30 分) (层序遍历,如何建树,后序输出,还有更简单的方法~)

    1147 Heaps (30 分)   In computer science, a heap is a specialized tree-based data structure that sati ...

  4. Swift4.0复习访问控制与作用域

    1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...

  5. laravel redis sentinel 和 redis cluster 配置

    laravel redis sentinel配置: 'redis' => [ 'cluster' => false, 'options' => [ 'replication' =&g ...

  6. 使用JSQLParser解析SQL中涉及到的表

    首先添加Maven依赖: <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId& ...

  7. 【Leetcode_easy】867. Transpose Matrix

    problem 867. Transpose Matrix solution: class Solution { public: vector<vector<int>> tra ...

  8. 【嵌入式硬件Esp32】ESP32使用visual studio cod界面

     如何下载安装IDE Visual Studio Code大家可以在微软的官网上根据自身的开发平台下载,至于安装方法就是无脑式地按Next就好了,下载地址如下所示: Visual Studio Cod ...

  9. 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法

    光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...

  10. 台式电脑Bios界面设置U盘启动