(更新时间)2021年3月25日 python基础知识(静态方法和类方法)
发布日期:2021-06-29 15:14:46
浏览次数:3
分类:技术文章
本文共 2198 字,大约阅读时间需要 7 分钟。
1. 类方法
是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以’cls’作为第一个参数的名字,就最好用’cls’了),能够通过实例对象和类对象去访问。
"""实例方法: 类中默认定义的方法,就是实例方法, 第一个参数为self,表示实例对象类方法: 使用 @classmethod 装饰的方法,称为类方法, 第一个参数是cls,代表的是类对象自己什么情况定义为实例方法,什么情况定义为类方法?1. 如果在方法中使用了实例属性, 那么该方法必须定义为实例方法2. 前提:不需要使用实例属性. 需要使用类属性,可以将这个方法定义为类方法"""class Dog(object): class_name = '狗类' def __init__(self, name, age): self.name = name self.age = age def play(self): # 实例方法 print(f"小狗{self.name} 在快乐的玩耍....") # def get_class_name(self): # 是实例方法, 因为没有使用实例属性,所以可以定义为类方法 # return Dog.class_name @classmethod def get_class_name(cls): # cls 是类方法的默认形参,在调用的时候,不需要手动传递,python解释器会自动传递 return cls.class_namedog = Dog('大黄', 2)dog.play()print(dog.get_class_name()) # 对象.类方法()# 类名.类方法()print(Dog.get_class_name())
类方法还有一个用途就是可以对类属性进行修改:
class People(object): country = 'china' #类方法,用classmethod来进行修饰 @classmethod def get_country(cls): return cls.country @classmethod def set_country(cls,country): cls.country = countryp = People()print(p.get_country()) #可以用过实例对象访问print(People.get_country()) #可以通过类访问p.set_country('japan') print(p.get_country())print(People.get_country())
结果显示在用类方法对类属性修改之后,通过类对象和实例对象访问都发生了改变
2. 静态方法
需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数,可以通过对象和类来访问。
"""实例方法: 类中默认定义的方法,就是实例方法, 第一个参数为self,表示实例对象类方法: 使用 @classmethod 装饰的方法,称为类方法, 第一个参数是cls,代表的是类对象自己静态方法: 使用 @staticmethod 装饰的方法,称为静态方法, 对参数没有特殊要求,可以有,可以没有什么情况定义为实例方法,什么情况定义为类方法, 什么情况下静态方法?1. 如果在方法中使用了实例属性, 那么该方法必须定义为实例方法2. 前提:不需要使用实例属性. 需要使用类属性,可以将这个方法定义为类方法3. 前提:不需要使用实例属性,同时也不需要使用类属性, 此时可以将这个方法定义为静态方法"""class Dog(object): class_name = '狗类' def __init__(self, name, age): self.name = name self.age = age def play(self): # 实例方法 print(f"小狗{self.name} 在快乐的玩耍....") @staticmethod # 定义静态方法 def show_info(): print('这是一个Dog类')dog = Dog('大黄', 2)dog.play()# 对象.方法名()dog.show_info()# 类名.方法名()Dog.show_info()
总结
- 从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
- 实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。
- 静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用
转载地址:https://codeboy.blog.csdn.net/article/details/115215037 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年05月01日 14时54分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
数据科学中的计量经济学技术
2019-04-29
突破边界:数据科学、数据工程和技术的未来
2019-04-29
一切有迹可循!优秀程序员的9个早期迹象
2019-04-29
在后台的python:众多程序员无法攻克的难题
2019-04-29
未来战争:装载AI的美国空军侦察机已经试飞……
2019-04-29
屡战屡败:为什么你会觉得学习编程很难?
2019-04-29
“狙击”特斯拉:电动汽车后起之秀的最后一战
2019-04-29
软件测试的未来:2021年需要关注的15大软件测试趋势
2019-04-29
六大基本AI术语:如何做好人工智能咨询服务?
2019-04-29
讲真,如果手机有灵魂,那就是“备忘录”
2019-04-29
端到端加密:WhatsApp不会去读取你的信息,它不需要……
2019-04-29
国会大厦骚乱,与一家极不可靠的面部识别公司……
2019-04-29
解锁宇宙密码:为什么是3、6、9?
2019-04-29
数据可视化中的格式塔心理学
2019-04-29
电动汽车的“专属危险”:网络威胁问题不容小觑
2019-04-29
短暂的告别,马上再回来
2019-04-29
统治50年:为什么SQL在如今仍然很重要?
2019-04-29
测试是一场竞争,而数据每次都会获得胜利
2019-04-29
读心的测谎系统:究竟是骗子还是个天才?
2019-04-29
最大规模技术重建:数据库连接从15000个到100个以下
2019-04-29