【python】类的详解

简介: 【python】类的详解

注:最后有面试挑战,看看自己掌握了吗

PO verses OO

PO

PO耦合性高,很多过程被重复做了。–专事专用的程序,没有未来。

重复定义相同的数据结构,非常拉跨。

自定义函数太多,记都记不住。

变量和函数联系不紧密,如果你的兄弟给你他的代码,里面有各种写好的函数,你还得拿走他的变量,防止出现一些隐藏问题。

OO

类----类名首字母大写–Box------数据+函数

方法–如__init()__—最简单的使用格式:def __init()__(self)

构造方法—特殊的方法

self关键字:在实例使用的时候,用来传输实例对象—其实是实例在内存的一个地址,隐形传递,实例可以调用的属性,必须在__init()__里面定义并且初始化

class Box:
    def __init__(self,chang,kuan,gao):
        self.chang=chang
        self.kuan=kuan
        self.gao=gao
    def say(self):
        return self.chang*self.kuan*self.gao
if '__main__' == __name__:
    a = Box(1,2,3)
    print(a.say())

当一个类很复杂的时候,考虑多弄一个

class Color1:
    def __init__(self, index=0):
        self.set_color = ["bai","hei"]
        self.index = index
    def setColor(self):
        return self.set_color[self.index]
        return self.set_color[self.index]
class Box:
    def __init__(self,chang,kuan,gao,c1=0):
        self.chang=chang
        self.kuan=kuan
        self.gao=gao
        self.color0=Color1(c1).setColor()
    def say(self):
        return self.chang*self.kuan*self.gao
if '__main__' == __name__:
    a = Box(1,2,3,1)
    print(a.say())
    print(a.color0)

类的改造

继承–不改原始代码的情况下,改造类,----假如第三方类已经被编译了,没有给源代码,也可以通过继承来改造

class Color1:
    def __init__(self, index=0):
        self.set_color = ["bai","hei"]
        self.index = index
    def setColor(self):
        return self.set_color[self.index]
        return self.set_color[self.index]
class Box:
    def __init__(self,chang,kuan,gao,c1=0):
        self.chang=chang
        self.kuan=kuan
        self.gao=gao
        self.color0=Color1(c1).setColor()
    def say(self):
        return self.chang*self.kuan*self.gao
class MyBox(Box):
    def __init__(self,chang,kuan,gao,c1):
        super().__init__(chang,kuan,gao,c1)
        self.material="paper"
    def say(self):
        return self.material
if '__main__' == __name__:
    a = MyBox(1,2,3,1)
    print(a.say())
    print(a.color0)

私有

变量函数私有化,前面加上双下划线即可

self.__color0="bai"
def __say(self)://看不到,实例无法调用此方法了
    return self.chang*self.kuan*self.gao

类的模块化

静态类verses动态类

静态类无法实例化 没有self关键字没有构造方法

静态类用来存一些变量和函数

使用方法

Box.say()

动态类

不要直接使用动态类里面的变量,用self属性化后使用,确保各个属性值各司其职,互不干扰

查看模块源代码

python源代码在线看

源代码

https://github.com/python/cpython/tree/3.5/Modules

Include 目录:包含了 Python 提供的所有头文件,如果用户需要自己用 C 或 C++来编写自定义模块扩展

Python,那么就需要用到这里提供的头文件。

Lib 目录:包含了 Python 自带的所有标准库,且都是用 Python 语言编写的。

Modules 目录:包含了所有用 C 语言编写的模块,比如 math、hashlib

等。它们都是那些对速度要求非常严格的模块。而相比而言,Lib 目录下则是存放一些对速度没有太严格要求的模块,比如 os。

Parser 目录:包含了 Python 解释器中的 Scanner 和 Parser 部分,即对 Python

源代码进行词法分析和语法分析的部分。除此以外,此目录还包含了一些有用的工具,这些工具能够根据 Python 语言的语法自动生成 Python

语言的词法和语法分析器,与 YACC 非常类似。

Objects 目录:包含了所有 Python 的内建对象,包括整数、list、dict 等。同时,该目录还包括了 Python

在运行时需要的所有的内部使用对象的实现。

Python 目录:包含了 Python 解释器中的 Compiler 和执行引擎部分,是 Python 运行的核心所在。

PCbuild 目录:包含了 Visual Studio 2003 的工程文件,研究 Python 源代码就从这里开始(本书将采用

Visual Studio 2017 对 Python 进行编译)。

Programs 目录:包含了 Python 二进制可执行文件的源码。

对象机制的基石 PyObject

对于初学者来说这么多类型的对象怎么学?别着急,我们后续章节会解答。

在开始我们的学习之旅之前,我们要先认识一个结构体PyObject,可以说 Python 的对象机制就是基于PyObject拓展开来的,所以我们先看看PyObject 到底长什么样。

源文件:Include/object.h

// Include/object.h
#define _PyObject_HEAD_EXTRA            \
    struct _object *_ob_next;           \
    struct _object *_ob_prev;
typedef struct _object {
    _PyObject_HEAD_EXTRA    // 双向链表 垃圾回收 需要用到
    Py_ssize_t ob_refcnt;   // 引用计数
    struct _typeobject *ob_type;    // 指向类型对象的指针,决定了对象的类型
} PyObject;

Python 中的所有对象都拥有一些相同的内容,而这些内容就定义在PyObject中,

PyObject 包含 一个用于垃圾回收的双向链表,一个引用计数变量 ob_refcnt 和 一个类型对象指针ob_type


🌸I could be bounded in a nutshell and count myself a king of infinite space.

特别鸣谢:木芯工作室 、Ivan from Russia


相关文章
|
4天前
|
前端开发 Python
Python编程的面向对象(二)—类的多态
Python编程的面向对象(二)—类的多态
12 7
|
3天前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
7天前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
8天前
|
Python
python 类中的内置方法
python 类中的内置方法
|
6天前
|
Python
Python类中属性和方法区分3-8
Python类中属性和方法区分3-8
|
2月前
|
供应链 数据挖掘 Serverless
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
|
2月前
|
Python
12类常用的Python函数
12类常用的Python函数
|
2月前
|
存储 程序员 Python
Python类的定义_类和对象的关系_对象的内存模型
通过类的定义来创建对象,我们可以应用面向对象编程(OOP)的原则,例如封装、继承和多态,这些原则帮助程序员构建可复用的代码和模块化的系统。Python语言支持这样的OOP特性,使其成为强大而灵活的编程语言,适用于各种软件开发项目。
18 1
|
2月前
|
存储 程序员 C++
python类及其方法
python类及其方法
|
2月前
|
C++ Python
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
16 1
下一篇
无影云桌面