python类属性实例属性.类方法实例方法静态方法的区别(详细全面)tcy
发布日期:2021-06-29 14:44:08
浏览次数:3
分类:技术文章
本文共 3908 字,大约阅读时间需要 13 分钟。
本人最近做一个项目,对于类有些迷惑,搜索整理比较全面,推荐大家观看以下视频,你会理解python类的真髓。
项目 | 类属性 | 实例属性 | 实例方法 | 类方法 | 静态方法 |
用途: | 1.类似全局变量 | 1.类实例的变量 | 1.访问类实例属性 | 1.访问类属性 | 1.类似一个独立函数;专属于类 |
2.所有方法都可以读写 | 2.仅仅实例方法可读写 | 2.方法内需要使用实例属性 | 2.方法内需要使用类属性/类方法 | 2.方法内无实例属性/类属性/类方法的操作 | |
3.可以访问所有方法 | 3.可以访问类方法静态方法 | 3.可以访问类方法静态方法 | |||
创建时间: | 类创建时已分配 | 类实例化时创建 | 已创建,没分配内存,使用时在分配内存 | ||
公共: | 类似public | 类似private | 类似public | ||
函数参数1: | - | - | self | cls | 于类无关,正常函数的参数 |
创建: | 初始化函数上类似g=0 | 初始化函数内部 | 类似 | @classmethod | @staticmethod |
g=0 | self.x=0 | def func(self,...) | def func(cls,...) | def func(...) | |
使用: | class A;a=A() | ||||
无类实例化: | A.g | 不能使用 | 不能使用 | A.func() | A.func() |
类实例化: | A.g(a.g和A.g不同) | a.x; | a.func()==A.func(a,...) | a.func() | a.func() |
a.__class__.g==A.g |
python类属性实例属性.类方法实例方法静态方法的区别:1.实例方法,类方法,静态方法都属于类,区别在于调用方式不同;1.1.实例方法: 实例对象调用,至少有一个参数self(表示实例对象),执行实例方法时, 自动将该调用方法的对象赋值给self(self其实是引用调用的实例对象)1.2.类方法(@classmethod装饰): 类和实例对象都可以调用;至少有一个参数cls(表示类); 自动将调用该方法的对象赋值给cls(cls其实是引用当前类)1.3.静态方法(@staticmethod装饰) 类和实例对象都可以调用,没有默认参数;其实它存在和外部定义函数没有区别;2.属性类属性是共有的,而实例属性是实例独有的,如果想要修改属性就会有对应的方法(类方法和实例方法),而静态方法的定义上面说过,作用和平常函数没有区别,但是,假设在外部定义对应的静态方法,如果存在多个类都想引用此方法,哪定义这个方法就会有歧义(函数是为了哪个类定义的),而定义静态方法的出发点是:不需要传入特定的参数,功能简单,和类方法和实例方法归为一类;推荐观看:https://www.bilibili.com/video/av50979957?from=search&seid=3682306859886449416
#!/usr/bin/env python3# -*- coding: utf-8-*-class A(object): g=10 def __init__(self,x): self.x=x #方法定义 def add(self,y):return self.x+y+A.g-20 @classmethod def add_cls(cls,x,y):return x+y+cls.g+A.g-20 @staticmethod def add_static(x,y):return x+y+A.g def add1(self,x,y):return self.add(y)+A.add_cls(x,y)+A.add_static(x,y)-20 @classmethod def add_cls1(cls,x,y):return A.add_cls(x,y)+A.add_static(x,y) @staticmethod def add_static1(x,y):return A.add_cls(x,y)+A.add_static(x,y)+10 #类变量修改 def set_g(self,g):A.g=g def get_g(self):return A.g @classmethod def set_g_cls(cls,g):A.g=g @classmethod def get_g_cls(self):return A.g @staticmethod def set_g_static(g):A.g=g @staticmethod def get_g_static():return A.g#测试程序#方法测试def test_method(): print('1.1.method=',A.g,A.add_cls(2,3),A.add_static(2,3)) a=A(2) print('1.2.a.__class__.g=',A.g,a.__class__.g)def test(): a1=A(10) a2=A(20) x=10;y=10; print('2.1.method=',a1.add(y),a1.add_cls(x,y),a1.add_static(x,y)) print('2.1.method=',a1.add1(x,y),a1.add_cls1(x,y),a1.add_static1(x,y)) print('2.2.method=',A.add(a1,y),A.add_cls(x,y),A.add_static(x,y)) print('2.2.method=',A.add1(a1,x,y),A.add_cls1(x,y),A.add_static1(x,y))#类属性测试def view(a1,A): lst1=[A.g,a1.get_g(),a1.get_g_cls(),a1.get_g_static()] lst2=[A.g,A.get_g(a1),A.get_g_cls(),A.get_g_static()] return lst1,lst2def test_g(): print('3.1.A.g=',A.g) a1=A(10) a2=A(20) a1.set_g(20) print('3.2.A.g=',view(a1,A)) print('3.2.A.g=',view(a2,A)) A.set_g(a1,30) print('3.2.A.g=',view(a1,A)) print('3.2.A.g=',view(a2,A)) a1.set_g_cls(40) print('3.2.A.g=',view(a1,A)) print('3.2.A.g=',view(a2,A)) A.set_g_cls(50) print('3.2.A.g=',view(a1,A)) print('3.2.A.g=',view(a2,A)) a1.set_g_static(60) print('3.2.A.g=',view(a1,A)) print('3.2.A.g=',view(a2,A)) A.set_g_static(70) print('3.2.A.g=',view(a1,A)) print('3.2.A.g=',view(a2,A)) if __name__=="__main__": test_method() test() test_g()"""1.1.method= 10 5 151.2.a.__class__.g= 10 102.1.method= 10 20 302.1.method= 40 50 602.2.method= 10 20 302.2.method= 40 50 603.1.A.g= 103.2.A.g= ([20, 20, 20, 20], [20, 20, 20, 20])3.2.A.g= ([20, 20, 20, 20], [20, 20, 20, 20])3.2.A.g= ([30, 30, 30, 30], [30, 30, 30, 30])3.2.A.g= ([30, 30, 30, 30], [30, 30, 30, 30])3.2.A.g= ([40, 40, 40, 40], [40, 40, 40, 40])3.2.A.g= ([40, 40, 40, 40], [40, 40, 40, 40])3.2.A.g= ([50, 50, 50, 50], [50, 50, 50, 50])3.2.A.g= ([50, 50, 50, 50], [50, 50, 50, 50])3.2.A.g= ([60, 60, 60, 60], [60, 60, 60, 60])3.2.A.g= ([60, 60, 60, 60], [60, 60, 60, 60])3.2.A.g= ([70, 70, 70, 70], [70, 70, 70, 70])3.2.A.g= ([70, 70, 70, 70], [70, 70, 70, 70])"""
转载地址:https://chunyou.blog.csdn.net/article/details/104483616 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月12日 12时47分35秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
弹性事务框架ETF4J——面向Java微服务的交易最终一致性解决方案
2019-04-29
【Scala 教程】Scala 条件与循环语句
2019-04-29
【Scala 教程】Scala 集合类型
2019-04-29
JAVA 线程同步机制 synchronized
2019-04-29
MySQL 安装教程(无脑版)
2019-04-29
IDEA 怎么删除一个Module
2019-04-29
走进数据科学:最好是通过比网课更好的方法
2019-04-29
AI革命第一步:最容易被忽略但必不可少的物联网
2019-04-29
2020年开发运维工具清单:选择开发运维工具堆栈吧
2019-04-29
效率提升法则:高效人士不会去做的4件事
2019-04-29
8.PostgreSQL约束
2019-04-29
【技术分享】使用AES加密技术保障数据安全
2019-04-29
【应用实例】布线多?成本高?不可靠?泽耀方案没烦恼!
2019-04-29
数据可视化工具:Matplotlib绘图
2019-04-29
用Python写个超级小恐龙跑酷游戏,上班摸鱼我能玩一天
2019-04-29
闺蜜看我用Python画了一幅樱花图,吵着要我给他介绍程序员小哥哥
2019-04-29
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽
2019-04-29
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早
2019-04-29