Python面向对象编程05:收尾总结一下类和对象

简介: 正式的Python专栏第40篇,同学站住,别错过这个从0开始的文章!

前篇学委展示分享了类的继承和重写,面向对象还有一些概念,继续跟上吧,这次总结一下!


类和对象再次认识回顾

类和对象,类就像是3D建模里面的模型数据,对象跟用这个3D模型使用3D打印出来的具体模型。


类没有生命周期,因为你的代码写好了类,它就存在,并不因为被不被加载而存在!


但是我们没有加载类到PYTHONPATH中,它不被找到!但是不代表它不存在!


对象呢?仅存在于Python程序运行过程中,中间程序关闭了,对象就消失了。


对象有生命周期

对象被创建,被惦记着(使用),被销毁了。(Python有对应的函数)


类和对象之间的数据共享

这就跟一家人住在一个房子里面一样,整个房子的设施是共享的,这样子类比。


先补充一个知识点:@staticmethod

这是python内置的一个函数修饰符,用来装饰函数的,也就是在函数的上方。


比如下面的代码:


class LeiXueWeiDemo():
    @staticmethod
    def call_without_object_creation():
        print("Run....")
#调用代码:
LeiXueWeiDemo.call_without_object_creation()

看看下面的程序:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/15 11:58 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : __init__.py.py
# @Project : hello
class Value(object):
    pass
"""
下面是一个程序员类定义
"""
class PythonProgrammer(object):
    class_value = Value()
    def __init__(self, name):
        self.name = name
    def code(self):
        print(f"{self.name}: life is too short, why not python?")
    @staticmethod
    def learn(self):
        print(f"{self.name}: learn python")
    def __str__(self):
        return f"PythonProgrammer(name:{self.name})"
    def __eq__(self, other):
        if isinstance(other, self.__class__):
            return self.name == other.name
        return False
p1 = PythonProgrammer("学委粉丝2号")
# p.code() #TypeError: code() missing 1 required positional argument: 'lang'
p1.code()
print("pi id:", id(p1))
print("PythonProgrammer id:", id(PythonProgrammer))
print("p1:", p1.name)
print("class_value id:", id(p1.class_value))
print("PythonProgrammer.class_value id:", id(PythonProgrammer.class_value))
print("p1.__dict__:", p1.__dict__)
print("p1.code:", p1.code)
print("PythonProgrammer.code:", PythonProgrammer.code)
print("p1.learn:", p1.learn)
print("PythonProgrammer.learn:", PythonProgrammer.learn)
print("p1的类型:", p1.__class__)
print("PythonProgrammer命名空间:", PythonProgrammer.__dict__)
print("PythonProgrammer类:", PythonProgrammer.__class__)

下面的运行结果务必看懂理解:

image.png

这里学委想表达的是,共享变量/函数,在内存中地址一样。


其他函数和变量,类被加载过之后,函数被加载,函数引用地址跟创建的对象的地址不一样!


同时类的数据属性,没有任何地址引用(因为类是没有数据属性赋值的),仅仅实例化为对象,我们才能通过对象来修改属性,对象是有状态的!


就像下面的图一样,当然内存地址只是虚构,未必连续!


image.png

总结

类和对象,一个就像是3D建模里面的模型数据,跟3D打印出来的模型。

但是3D打印没存在共享变量/共享函数,因为模型数据文件,跟打印出来的实物没有任何物质关联!

目录
相关文章
|
23天前
|
Python
探索Python中的魔法方法:打造你自己的自定义对象
【8月更文挑战第29天】在Python的世界里,魔法方法如同神秘的咒语,它们赋予了对象超常的能力。本文将带你一探究竟,学习如何通过魔法方法来定制你的对象行为,让你的代码更具魔力。
37 5
|
3天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
21天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
22天前
|
Python
Python 中的面向对象编程 (OOP)
【8月更文挑战第29天】
23 4
|
21天前
|
存储 程序员 Python
Python类的定义_类和对象的关系_对象的内存模型
通过类的定义来创建对象,我们可以应用面向对象编程(OOP)的原则,例如封装、继承和多态,这些原则帮助程序员构建可复用的代码和模块化的系统。Python语言支持这样的OOP特性,使其成为强大而灵活的编程语言,适用于各种软件开发项目。
16 1
|
22天前
|
C++ Python
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
12 1
|
22天前
|
Python
|
10月前
|
Python
一文学会Python面向对象中封装、继承、多态使用
一文学会Python面向对象中封装、继承、多态使用
100 0
|
3月前
|
Python
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
|
4月前
|
Python
Python进阶---面向对象 继承
Python进阶---面向对象 继承
21 1