Python类方法总结讲解


Posted in Python onJuly 26, 2021

 

一、类方法

在类中的函数称为类方法。与普通函数定义稍有区别。

1.普通方法

1.1 普通方法定义

普通方法与一般函数的定义稍有区别的点在于第一个参数是self,,指代的意思是指向实例对象本身。如下图定义

class Person:
    def __init__(self,name,age):
        # name=对象的那个name,age=对象的那个age
        self.name=name
        self.age=age

1.2 普通方法调用

思考一下函数的调用是函数名(),类的方法调用呢?

类方法调用必须要借助对象。调用方式:对象.方法名()。

不能直接用类名.方法名(),前面已经说过了类中的方法第一个参数是self,代表的是实例对象本身,所以类是不能直接调用普通方法的

#实例化对象cat
 cat=Animals()
#调用类中普通方法run
cat.run()

如果使用类名.方法名的时候会出现:TypeError: run() missing 1 required positional argument: 'self',遗失一个参数。

Python类方法总结讲解

但实际上我们再使用对象.方法名()的时候也没有带self,却没有报遗失一个参数。

原因:当我们实例化对象的时候,即cat=Animal()执行的时候已经将cat的地址传给self,此时self指代的是cat.

2.魔术方法

2.1 魔术方法定义

前面普通方法是需要对象名.方法名()去调用,而我们的魔术方法比较特殊,他是在特殊时刻自动触发,即不需要调用。

2.2 常见魔术方法

__init__(self,[参数名]) 对象创建时自动调用的方法
__str__(self,[参数名]) 函数有返回值,当打印对象名的时候自动调用
__del__(self) 当删除引用时自动调用
__call__(elf,[参数名]) 当执行对象名()时自动调用即把对象当成函数使用

 Python类方法总结讲解

看上图我们只是创建了cat对象,并没有调用__init__方法,但是却执行了方法里面的方法体,是因为在创建对象时python自动触发了。

__init__方法有什么作用:

定义一个类时,常常要定义属性和方法,属性是类的一个特征,而方法是它能做的事情。

所有的人都有名字和年龄,所以我们要定义一个Person类,拥有两个属性名字和年龄

如果在类里写如下图

class Person():
   name='jimi'
   age=12
   def run(self):
     print('run')
person1=Person()
person2=Person()

那么person1和person2对象拥有了Person的属性,但是此刻他俩的属性一样,可是并不符合每个人的特征啊?每个人的名字和年龄不一致的。那怎么样才能创造出对象不一样的属性值,这里就用__init__

class Person:
    def __init__(self,name,age):
        # name=对象的那个name,age=对象的那个age
        self.name=name
        self.age=age
 
person1=Person('meimei',12)
# 打印person1的?傩  meimei 12
print(person1.name,person1.age)
person2=Person('john',13)
# # 打印person1的?傩  john 13
print(person2.name,person2.age)

__str__是用?泶蛴《韵笫狈祷匾桓鲋担???_str__是有return 语句的。如果不用__str__打印对象,对象就是一个地址

class Person:
    def __init__(self,name,age):
        # name=对象的那个name,age=对象的那个age
        self.name=name
        self.age=age
    # def __str__(self):
    #     return '这是name:{},这是age:{}'.format(self.name,self.age)
 
person1=Person('meimei',12)  #打印结果<__main__.Person object at 0x0000025C1F932C50>
print(person1)

Python类方法总结讲解

3.类方法

3.1 类方法定义

class Person:
    def __init__(self,name,age):
        # name=对象的那个name,age=对象的那个age
        self.name=name
        self.age=age
    # def __str__(self,*krg,**krgs):
    #     return '这是name:{},这是age:{}'.format(self.name,self.age)
    #类方法
    @classmethod
    def test1(cls):
        print('我是类方法')

方法前用装饰器@classmethod修饰。第一个参数为cls代表类

类方法特点:类方法里面不能调用普通方法

3.2 类方法调用

  1. 对象名.方法名()
  2. 类名.方法名()

4.静态方法

4.1 静态方法定义

class Person:
    def __init__(self,name,age):
        # name=对象的那个name,age=对象的那个age
        self.name=name
        self.age=age
    # def __str__(self):
    #     return '这是name:{},这是age:{}'.format(self.name,self.age)
    def run(self):
        Person.test1()
        Person.test()
        print('我是run')
    @classmethod
    def test1(cls):
        print('我是类方法')
    @staticmethod
    def test(*krgs):
        Person.test1()
        print('我是静态方法')

静态方法用装饰器@staticmethod修饰,无cls,self参数

4.2 静态方法调用

对象名.静态方法名()

类名.静态方法名()

二 总结

普通方法中:

  1. 可调用普通方法,使用self.方法名()
  2. 可调用静态方法,使用类名.方法名()
  3. 可调用类方法,使用类名.类名.方法名()

静态方法:

  1. 不可调用普通方法
  2. 可调用类方法,类名.方法名()
  3. 可调用静态方法,类名.方法名()

类方法:

  1. 不可调用普通方法
  2. 可调用类方法,类名.方法名()
  3. 可调用静态方法,类名.方法名()

到此这篇关于Python类方法总结讲解的文章就介绍到这了,更多相关Python类方法总结内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python安装教程 Pycharm安装详细教程
May 02 Python
python遍历序列enumerate函数浅析
Oct 17 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
Python函数参数操作详解
Aug 03 Python
Pycharm更换python解释器的方法
Oct 29 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
pandas数值排序的实现实例
Jul 25 #Python
python非标准时间的转换
Jul 25 #Python
OpenCV 图像梯度的实现方法
Jul 25 #Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 #Python
Pandas自定义选项option设置
Jul 25 #Python
Pandas 稀疏数据结构的实现
Jul 25 #Python
Python中rapidjson参数校验实现
Jul 25 #Python
You might like
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
判断对象是否Window的实现代码
2012/01/10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
python实现rsa加密实例详解
2017/07/19 Python
python安装Scrapy图文教程
2017/08/14 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
美国知名艺术画网站:Art.com
2017/02/09 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
《陶罐和铁罐》教学反思
2014/02/19 职场文书
党员个人剖析材料
2014/09/30 职场文书
2014年科技工作总结
2014/11/26 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
Java移除无效括号的方法实现
2021/08/07 Java/Android
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers
Spring Boot实现文件上传下载
2022/08/14 Java/Android