python中类的属性和方法介绍


Posted in Python onNovember 27, 2018

Python-类属性,实例属性,类方法,静态方法,实例方法

类属性和实例属性

#coding:utf-8
class Student(object):
  name = 'I am a class variable' #类变量
>>> s = Student() # 创建实例s
>>> print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
Student
>>> print(Student.name) # 打印类的name属性
Student
>>> s.name = 'Michael' # 给实例绑定name属性
>>> print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
Michael
>>> print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
Student
>>> del s.name # 如果删除实例的name属性
>>> print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student

类方法,实例方法,静态方法

实例方法,第一个参数必须要默认传实例对象,一般习惯用self。

静态方法,参数没有要求。

类方法,第一个参数必须要默认传类,一般习惯用cls。

# coding:utf-8
class Foo(object):
  """类三种方法语法形式"""
 
  def instance_method(self):
    print("是类{}的实例方法,只能被实例对象调用".format(Foo))
 
  @staticmethod
  def static_method():
    print("是静态方法")
 
  @classmethod
  def class_method(cls):
    print("是类方法")
 
foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()

运行结果:

是类<class '__main__.Foo'>的实例方法,只能被实例对象调用
是静态方法
是类方法
----------------
是静态方法
是类方法

类方法

由于python类中只能有一个初始化方法,不能按照不同的情况初始化类,类方法主要用于类用在定义多个构造函数的情况。
特别说明,静态方法也可以实现上面功能,当静态方法每次都要写上类的名字,不方便。

# coding:utf-8
class Book(object):
 
  def __init__(self, title):
    self.title = title
 
  @classmethod
  def class_method_create(cls, title):
    book = cls(title=title)
    return book
 
  @staticmethod
  def static_method_create(title):
    book= Book(title)
    return book
 
book1 = Book("use instance_method_create book instance")
book2 = Book.class_method_create("use class_method_create book instance")
book3 = Book.static_method_create("use static_method_create book instance")
print(book1.title)
print(book2.title)
print(book3.title)
Python 相关文章推荐
python读取html中指定元素生成excle文件示例
Apr 03 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
pytorch MSELoss计算平均的实现方法
May 12 Python
python_tkinter弹出对话框创建
Mar 20 Python
代码复现python目标检测yolo3详解预测
May 06 Python
Django框架中模型的用法
Jun 10 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 #Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 #Python
Django2.1.3 中间件使用详解
Nov 26 #Python
django+echart绘制曲线图的方法示例
Nov 26 #Python
详解配置Django的Celery异步之路踩坑
Nov 25 #Python
利用Python如何实现一个小说网站雏形
Nov 23 #Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 #Python
You might like
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
JavaScript 数组详解
2013/10/10 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
浅谈原型对象的常用开发模式
2017/07/22 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Jdbc数据访问技术面试题
2012/03/30 面试题
高三政治教学反思
2014/02/06 职场文书
北体毕业生求职信
2014/02/28 职场文书
教师求职自荐信
2014/03/09 职场文书
中学生演讲稿
2014/04/26 职场文书
伏羲庙导游词
2015/02/09 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年超市工作总结
2015/04/09 职场文书
HTML基础详解(下)
2021/10/16 HTML / CSS