Python - 面向对象(二)类方法、静态方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python - 面向对象(二)类方法、静态方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1803字,纯文字阅读大概需要3分钟。
内容图文
面向对象的各种方法
静态方法 - @staticmethod
class Person(): name = "cool guy" @staticmethod def static(self): print("staticmethod", self.name) if__name__ == "__main__": p = Person() p.static()
执行结果
p.static()
TypeError: static() missing 1 required positional argument: ‘self‘
为什么会报错?
静态方法不能访问实例属性、类属性、实例方法、类方法
静态方法的特别之处
- 它跟类与对象无关
- 跟在模块中直接定义普通函数没有什么区别,只是把“静态方法”放到了类里面,所以只能设置形参
- 只能通过 类名.静态方法 来调用
正确调用写法
class Person(): name = "cool guy" @staticmethod def static(name): print("staticmethod", name) if__name__ == "__main__": p = Person() Person.static(p.name)
执行结果
staticmethod cool guy
类方法 - @classmethod
class person: name = "cool man" @classmethod def class_m(cls): print("--第一个类方法--", id(cls)) print("--第一个类方法--", cls.name) cls.self_m(cls) cls.class_m2() def self_m(self): print("--实例方法--", id(self)) print("--实例方法--", self.name) @classmethod def class_m2(cls): print("--第二个类方法--", id(cls)) p = person() p.name = "bad boy"# 绑定实例属性p.class_m() person.class_m()
执行结果
--第一个类方法-- 2381398112712 --第一个类方法-- cool man --实例方法-- 2381398112712 --实例方法-- cool man --第二个类方法-- 2381398112712 --第一个类方法-- 2381398112712 --第一个类方法-- cool man --实例方法-- 2381398112712 --实例方法-- cool man --第二个类方法-- 2381398112712
知识点
- 类方法内部可以直接访问类属性、类方法、实例方法
- cls 可以理解成类对象的引用,哪一个类对象调用的方法, cls 就是哪个一个类的引用, 类对象.类方法 ;和实例方法中的 self 很像, 实例对象.实例方法
- 调用其他类方法时,不用传递cls参数;但调用其他实例方法时,需要传递cls参数
- 在类方法内部调用的实例方法,接收的是一个类对象而不是实例对象,当实例对象绑定实例属性时,在实例方法中打印的仍然是类属性;表明类方法无法访问实例属性
- 一个类只有一个类对象,即使通过实例对象调用类方法,传递的仍然是类对象的引用,所有类方法都被同一个类对象调用
思考题
如果方法内部 即需要访问 实例属性,又需要访问 类属性,应该定义成什么方法?
答案:实例方法,因为可以通过 类对象.类属性 来访问,但在类方法中无法访问实例属性
class Person: name = "cool man"def self_m(self): Person.name = "yep"print(self.name) p = Person() p.name = "bad boy"# 绑定实例属性p.self_m() Person.self_m(Person)
执行结果
bad boy
yep
知识点
类对象调用实例方法时,需要传递类对象
原文:https://www.cnblogs.com/poloyy/p/12533998.html
内容总结
以上是互联网集市为您收集整理的Python - 面向对象(二)类方法、静态方法全部内容,希望文章能够帮你解决Python - 面向对象(二)类方法、静态方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。