面向对象基础——绑定方法、非绑定方法、隐藏属性、property装饰器

AI 生成 CAN 通信测试用例实战 本文分享了AI辅助汽车电子测试用例编写的实战经验。通过某车企CAN网络测试项目案例,对比传统方式(需27天)与AI辅助方式(仅5天)的效率差异,展示81%的效率提升。文章详细介绍了从DBC文件提取信号信息的方法,包括DBC文件结构解析、信号定义说明,并提供了完整的Python解析脚本代码,可将信号信息导出为JSON或Excel格式,为后续AI批量生成测试用例奠定基础。 阅读详情

绑定方法

​ 在我们定义类的时候,会发现在类中会定义一些函数,我们称之为方法,那么对于我们进行实例化之后产生的实例,我们也可以使用这些方法,那么问题来了,这些方法到底是绑定给类的还是绑定给实例化后产生的对象的?如果是绑定给对象的,那么如何对类进行绑定方法呢?下面我们来进行分析:

绑定给对象的方法

​ 在python中,如果按照正常的函数定义方式,来定义类中的方法,不加任何装饰,那么这些方法是绑定给类实例化后产生的对象的,可以通过对象名.方法名()方式调用。下面通过代码进行演示:

class Student():
    school = 'SH'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def tell_info(self, v):
        print('name:%s, age: %s, salary:%s' % (self.name, self.age, v))


stu = Student('mary', 19)
# 对象来调用方法, 绑定给对象的方法由对象来调用,特殊之处是把对象自己当成第一个参数传递到方法里面
stu.tell_info(20000)  # 本质就是stu.tell_info(stu,10)
绑定给类的方法

​ 既然上面说了不添加任何装饰所定义的方法是绑定给对象的,那么绑定给类的方法就需要添加一些装饰了。在python中如果需要将某一个方法绑定给类,那么就需要在该方法定义的时候添加@classmethod装饰器,见名知意,就说明该方法是绑定给类的方法,该装饰器的内部就完成了这样一个功能,在使用的时候通过类名.方法名()调用,内部会自动将类作为第一个参数传给该方法。下面我们通过代码进行演示:

# 我们通过简单的mysql连接方式来举例,mysql连接需要ip和port
# 我们想要通过调用类里面的方法来返回一个对象
class Mysql():
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port

    # 绑定给类的方法
    @classmethod
    def from_func(cls):
        return cls('127.0.0.1', '3306')
    
    
    def func(self):
        self.__class__  # 可以通过此方式拿到产生对象的类名

# 类调用
Mysql.from_func() # 本质就是Mysql.from_func(Mysql)

总结:

​ 通过上面的例子可以看出,方法既可以绑定给类,也可以绑定给对象,那么什么时候绑定给类,什么时候绑定给对象呢?我们是这样决定的,如果方法中用到了类名,那么就绑定给类,如果方法中用到了对象,那么就绑定给对象。

​ 这时,就有人会问,如果方法中方法中既用到了类名,又用到了对象名,那么怎么办呢?哈哈,让小调皮要失望了,在将方法绑定给对象的时候,在方法内部可以通过self.__class__来取代生成对象的类名,这样就可以同时实现用到类名和对象名了哦!

非绑定方法

​ 上面说了绑定方法,那么,有人肯定会问,那么我不想绑定呢?哈哈,下面就是介绍这种情况。

​ 非绑定方法又称静态方法,简单来说,就是该方法既不绑定给类,也不绑定给对象,对象和类都可以调用。在python中,为了实现这样的功能,在该方法定义时添加了@staticmethod装饰器,下面我们通过代码进行演示:

class People():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.id = self.create_id()

    @staticmethod
    def create_id():
        import uuid
        return uuid.uuid4()

# 对象调用
obj = People('tom', 19)
res=obj.create_id()  # obj.create_id(obj)
print(res)

# 类调用
print(People.create_id())

'''
    非绑定方法:静态方法
        1. 加一个装饰器:@staticmethod
        2. 函数已经变成普通函数
        3. 对象和类都可以调用,
'''

隐藏属性

​ 隐藏属性并不是完全的不能用,而是对于类内部可以使用,外部不可以使用而已。

​ 如果要对类中的属性进行隐藏,只需要在给该属性前面添加双下划线,即__属性名,这样对外就不能直接拿到该属性,但是可以通过_类名__属性名来拿到该属性,但是一般不会这样做,一般会通过定义一个接口来访问这些属性。下面通过代码来进行演示:

class Student():
    __country = 'CHINA'  # 并不是完全隐藏,只是做出了改变而已,在__dict__中存为_Student__country

    def __init__(self, name, age):
        self.__name = name # _Student__name
        self.age = age

    def __func(self): # _Student__func
        print('from func')

    def get_country(self):
        return self.__country  # self._Student__country

    def set_country(self, v):
        if not type(v) is str:
            print('不是str')
            return
        self.__country = v


print(Student.__dict__)

"""
注意:
	1.在类定义阶段发生变形:_类名__属性名
    2.类属性和对象属性都可以隐藏
    3.隐藏是对内不对外,一般通过在类内部开放接口返回隐藏属性值,可以对外部做严格控制
"""

property装饰器

​ property装饰器的目的是为了将函数伪装成属性,调用的时候,可以不用加括号就可以调用。

class Student():
    __country = 'CHINA'  # _Student__country

    def __init__(self, name, age):
        self.__name = name # _Student__name
        self.age = age

    def __func(self): # _Student__func
        print('from func')

    # 把函数伪装成属性,但是只能查看,不能进行其他操作
    @property
    def country(self):
        return self.__country  # self._Student__country
	
    # 实现修改该属性
    @country.setter
    def country(self, v):
        if not type(v) is str:
            return
        self.__country = v
    
    # 实现删除该属性
    @country.deleter
    def country(self):
        print('不能删')
        del self.__country
        
stu = Student('mary', 18)
print(stu.country)
stu.country = 'xxx'
del stu.country
Protege本体建模实战:从零构建电影知识图谱并导入Neo4j 本体建模是知识图谱构建的基石,通过类、属性、实例和约束系统描述领域知识,为数据提供可复用的语义骨架。OWL作为本体描述语言的标准,配合Protege工具可实现可视化建模,并借助推理机验证逻辑一致性,提升模型可靠性。在工程落地中,本体模型常需导入图数据库如Neo4j,以支持高效的关联查询与业务应用。本文以影视领域为背景,完整演示Protege中定义类层级、创建对象/数据属性、填充实例,以及导出OWL文件并通过Python脚本转换为Neo4j节点与关系的全过程,同时梳理命名空间、匿名节点、编码等易踩坑点,帮助读 阅读详情

相关推荐

metaRTC嵌入式webrtc编译指南

metaRTC编译支持qmake和cmake,qmake使用QT最为方便,新版本新增了cmake支持。 ...

metaRTC的博客 9518

面向对象之绑定方法

绑定给对象方法,对象能调用,类也能调用# 对象调用会把对象自己当成第一个参数传给方法的第一个形参对象.方法(参数1,参数2) -------- self参数不用传# 类调用,方法中有几个参数就要传几个参数(包括self)类名.方法(对象,参数1,参数2)'''绑定给对象的方法,对象不能直接调用,需要传入对象才能调用,如果是静态对象,可以直接类名.方法调用。

m0_69962105的博客 217

如何用Megatron-LM搭建多卡集群?手把手教你配置分布式训练环境

本文提供了一份详细的Megatron-LM多卡集群搭建实战指南。从硬件兼容性检查、软件栈版本对齐,到分布式并行策略(数据并行、张量并行、流水线并行)的配置与多节点启动脚本编写,手把手教你配置稳定高效的分布式训练环境,并分享了关键的排错与性能调优经验。

yellow的专栏 414

Day32【五】面向对象之绑定方法与飞绑定方法

【五】面向对象之绑定方法与飞绑定方法 【一】什么是绑定方法与非绑定方法 类中定义的函数分为两大类: 绑定方法和非绑定方法 其中绑定方法又分为 绑定到对象的对象方法 绑定到类的类方法。 在类中正常定义的函数默认是绑定到对象的 而为某个函数加上装饰器@classmethod后,该函数就绑定到了类。 我们在之前的章节中已经介绍过对象方法了,本节我们主要介绍类方法。 类方法...

Chimengmeng的博客 111

ADS1220 STM32硬件SPI驱动程序

前一段时间温故了下标准库,使用的是F1系列芯片,测试程序。

随风飘零翼的博客 5770

Claude Code 的 Subagent 到底怎么用?

Subagent是ClaudeCode中的专业化AI代理系统,每个代理专注单一领域(如代码审查、数据库设计),具备独立记忆空间和并行处理能力。适用于中大型项目开发,通过配置文件定义代理职责与权限,可显式调用或自动触发多代理协作。典型场景包括代码安全审查、全栈并行开发和技术方案对比。使用时需注意避免过度拆分、权限过宽等陷阱,结合链式工作流和负载均衡可显著提升效率。实测在电商项目开发中能缩短20%工期并提升40%性能。

bgeyq的博客 1992

面向对象(绑定方法-非绑定方法-隐藏属性-property装饰器-面向对象的三大特征)

配置文件(settings.py)

linjun的博客 276

告别标注地狱!YOLO+CLIP多模态零样本检测全实战:图文联合推理,想检测什么直接输文字,不用训模型

这套方案我给朋友的超市用了快3个月,运行极其稳定,临期商品的检测准确率能到96%,后续加了“货架空货检测”“通道杂物堆积检测”,都是改一行文本就搞定,完全不用重新开发,朋友说省了十几万的定制开发费用。很多做计算机视觉的朋友,总觉得目标检测必须标数据、训模型,其实不是的。现在多模态大模型的能力已经足够强,把YOLO的定位能力和CLIP的图文泛化能力结合起来,就能用极低的成本,搞定绝大多数定制化检测需求。对于我们开发者来说,技术的价值从来不是炫技,而是用最简单的方案,解决最实际的问题。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 516

面向对象、面向过程、类与对象关系级绑定方法

一、面向对象: 面向对象是一种编程思想,是一种让程序员能更好的编程思想。 核心就是对象,程序是一系列对象的集合,程序负责调度控制这些对象来交互着完成任务。 在面向对象中,程序员的角度发生了改变,从具体操作者变成了指挥者。 强调:对象不是凭空产生的,需要我们自己设计 面向对象的三大优点: 拓展性 灵活性 重用性(代码可以多次使用) ...

weixin_30767921的博客 138

【深度学习】脸部修复,CodeFormer,论文,实战

Blind face restoration是一个高度 ill-posed 的问题,通常需要辅助引导来 1) 改善从降级输入到期望输出的映射,或者 2) 补充在输入中丢失的高质量细节。在本文中,我们展示了在一个小的代理空间中学到的离散码本先验可以通过将盲目的面部恢复建模为 a code prediction task来大大减少恢复映射的不确定性和模糊性,同时为生成高质量面部提供丰富的视觉元素。

q742971636的博客 2994

基于深度学习的鸟类检测识别系统:YOLOv5 + YOLOv8 + YOLOv10 + UI界面 + 数据集

YOLOv5是当前目标检测领域非常流行的模型,具有良好的检测精度和实时推理速度。其网络结构相比前几代YOLO模型进行了优化,尤其是在检测精度和计算效率上有了显著提高。YOLOv5特点高效性:能够在较低的硬件环境下进行实时检测。易于部署和使用:YOLOv5提供了简单的API接口,方便开发者快速集成和使用。优异的精度:在多个数据集上测试,表现出色。本文详细介绍了基于YOLOv5、YOLOv8和YOLOv10的鸟类检测识别系统的设计与实现。

YOLO 1114

【python入门】day13:面向对象之创建对象、动态绑定方法和属性

看万山红遍,层林尽染;漫江碧透,百舸争流。鹰击长空,鱼翔浅底,万类霜天竞自由。

胸纳甲兵,烽烟起可靖疆晏海。 823

商品标签识别系统:基于YOLO系列的深度学习实现

随着零售行业的快速发展和自动化需求的增长,商品标签识别技术变得越来越重要。本文详细介绍了一个完整的商品标签识别系统,该系统基于YOLO系列目标检测算法(包括YOLOv5、YOLOv8和YOLOv10),采用PySide6构建用户界面,并提供完整的训练代码和数据集处理方案。该系统能够准确识别商品标签中的关键信息,如价格、条形码、生产日期等,为零售自动化、库存管理和智能结算提供技术支持。

YOLO 349

封装、property装饰器、绑定方法与非绑定方法

一、封装 1、封装:封装是面向对象三大特征的最核心的一个特征,封装的结果是将装到对象或者类中的属性给隐藏起来。 2、封装数据: **(1)在定义类或者初始化对象时,在属性前加__,就会将该属性隐藏起来 但该隐藏起始只是一种变形_类名__属性名,并没有真的隐藏起来 class Student: __school = "oldboy" # _school__school = "oldboy print(print(Student.__school) # 报错 print(Student._Stude

weixin_45577832的博客 210

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

绑定方法和隐藏属性之property装饰器

目录一:绑定方法1.绑定给对象的方法2.绑定给类的方法3.非绑定方法之静态方法二,隐藏属性1.如何隐藏属性三,property 装饰器一:绑定方法 1.绑定给对象的方法 class Person: # 绑定给对象的方法 对象调用 自动把对象传入 def print_name(self): print(self.name) print('对象的绑定方...

sunliusen的博客 66

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

封装,property,绑定方法与非绑定方法

一.封装 面向对象三大特征: 封装,继承,多态 最重要的一个特性就是封装,封装就是把数据和功能整合到一起.所以封装==整合 在封装的基础上,我们可以将装到对象或类中的属性隐藏起来,注意: (1).在定义或者初始化对象时,在属性前加__,就会将该属性隐藏起来,但该隐藏起始只是一种变形_类名__属性名,并没有真正的隐藏起来 (2)该变形操作是在类定义阶段扫描语法时发生的变形,类定义之后添加的__开头的属性不会发生变形 (3)该隐藏是对外不对内的 (4)在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义

yikenaoguazi的博客 237

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python绑定与非绑定方法、私有属性、property装饰器

property装饰器的作用就是把类体内方法伪装成类属性来使用。在类中直接定义的函数默认是绑定到对象的,,该函数就绑定到了类。绑定方法和非绑定方法。绑定到对象的对象方法。

Mchen的博客 300

输入学号类封装_封装、property、绑定方法、非绑定方法

封装面向对象编程有三大特性:封装、继承、多态,其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起。同时,针对封装到对象或者类中的属性,我们还可以严格控制对它们的访问,分两步实现:隐藏与开放接口隐藏属性Python的Class机制采用双下划线开头的方式将属性隐藏起来(设置成私有的),但本质上这仅仅只是一种变形操作类中所有双下滑线开头的属性都会在类的定义阶段、检测语法时自动变成“_类名...

weixin_29570673的博客 73

37.对象属性查找&绑定方法

文章目录1.属性查找顺序1.1.对象属性查找1.2类查找2.使用方法2.1对象使用2.2类使用方法3修改类的属性3.1类增查改删3.2在方法内修改类的属性3.4练习13.5练习24.绑定方法4.1绑定给对象4.2绑定给类5.类与类型的概念/一切皆对象6.非绑定方法(静态方法)6.1不带参数6.2带参数7.隐藏属性7.1目的7.2变形7.3在类中访问变形属性7.4不在类中定义7.5方法变形7.6使用场景8.property装饰器8.1使用8.2自动触发1.类属性2.对象属性8.3.另一种格式 1.属性查找顺序

清风 1640

面向对象的绑定方法以及隐藏属性

目录面向对象绑定方法和非绑定方法绑定给对象的方法绑定给类的方法非绑定方法隐藏属性property装饰器面向对象绑定方法和非绑定方法 绑定给对象的方法 class Student: def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender ...

felix的博客 150

Python面向对象之封装、property特性、绑定方法与非绑定方法

一、封装 ''' 1、什么封装 封:属性对外是隐藏的,但对内是开放的(对内是开放的是因为在类定义阶段这种隐藏已经发生改变) 装:申请一个名称空间,往里装入一系列名字/属性 2、为什么要封装 封装数据属性的目的 首先定义属性的目的就是为了给类外部的使用使用的, 隐藏之后是为了不让外部使用直接使用,需要类内部开辟...

a9794666的博客 137

Python高级编程 day14 面向对象--封装

本文主要讲述了面向对象三大特征之一的封装以及面向对象的绑定,非绑定方法。学习之后可以将对象简单进行属性隐藏与手动绑定。

2401_88454635的博客 1500

绑定方法与非绑定方法

在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用。要了解封装,离不开“私有化”,就是将类或者是函数中的某些属性限制在某个区域之内,外部无法调用。

m0_71115526的博客 113

python装饰器 property_python基础学习-property装饰器

"""成人的BMI数值:过轻:低于18.5正常:18.5-23.9过重:24-27肥胖:28-32非常肥胖, 高于32体质指数(BMI)=体重(kg)÷身高^2(m)EX:70kg÷(1.75×1.75)=22.86"""#案例1:classPeople:def __init__(self,name,weight,height):self.name=nameself.weight=weightse...

weixin_39833429的博客 56

封装_绑定方法

封装 ​ 综上所述:面向对象共有三种方法,继承与派生,多态性,以及最后的封装。 封装指的是什么? ​ 封装其实就是将数据与功能的整合,以及我们可以通过封装做到将封装对象的属性以及方法进行隐藏。 如何隐藏 ​ python中的Class通过使用双下划线的方式将属性隐藏 class Test: def __init__(self,name,age): #本质是一种变形操作_self__name self.__name = name # _Test__name

qq_43379243的博客 375

Python面向对象 #2

而当对象来调用info()的时候,由于对象调用自己的绑定方法,会自动将对象当作第一个参数传递进去,所以,当类中()方法没有带参数时,而你又给它传递了一个,显然是会报错的。既然类中的方法,默认都是绑定给对象使用,那么,我们要采取一点措施,将类中的绑定方法解除对象绑定关系,进而绑定到类上。首先我们要知道,凡是类中的方法或者是函数,都是默认都是绑定给对象使用的,下面我们代码实例来讲解绑定方法的应用。两者报错结果一致,这就说明了,当对象来调用类的绑定方法时,也是自动将类传递进去,并不需遵循函数参数传递的规则。

shiyaopeng11的博客 111
上一篇: 面向对象基础——初识面向对象
下一篇: 面向对象进阶——封装、继承、多态
Jakey_src
博客等级 码龄9年 10粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值