NJU1healer的个人博客分享 http://blog.sciencenet.cn/u/NJU1healer

博文

Python中定义类时的self与匿名函数

已有 4758 次阅读 2020-8-22 09:23 |个人分类:Python|系统分类:科研笔记

(一)定义类时的self

1.1 Python要self的理由

       Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数(self),但在调用这个方法的时候不必为这个参数赋值(显胜于隐的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)。

1.2 为何Python给self赋值而你不必给self赋值?

       例子说明:创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2),这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)

这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。

      self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

1.3 具体说明案例

       因为Python调用方法创建类实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,他是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

       以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。


class Dog():

    '''一次模拟小狗的简单尝试'''

    

    def __init__(self, name, age):

        '''初始化属性name和age'''

        self.name = name

        self.age = age

        

    def sit(self):

        '''模拟小狗被命令时蹲下'''

        print(self.name.title() + "is now sitting.")

         

    def roll_over(self):

        '''模拟小狗被命令时打滚'''

        print(self.name.title() + " rolled over!") 


分析:

       根据约定,在Python中,首字母大写的名称指的是类。这个类定义中的括号是空的,因为我们要从空白创建这个类。

(1)方法__init__()

       类中的函数称为方法;__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法和普通方法发生名称冲突。

       方法__init__()定义成包含三个形参:self、name和age。在这个方法的定义中,形参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。我们创建Dog实例时,Python将自动调用Dog类的方法__init__().我们将通过实参向Dog()传递名字和年龄;self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name和age)提供值。

       sit和roll_over中定义的两个变量都有前缀self。以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。self.name=name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。self.age=age的作用与此类似。像这样可以通过实例访问的变量称为属性。

(二)匿名函数

image.png

       关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数!

具体参考博文:https://www.cnblogs.com/xiao-apple36/p/8577727.html

应用:

(1)

image.png

(2)

image.png

image.png

(3)匿名函数的方式解决

image.png

image.png

【参考】

https://blog.csdn.net/xuejiaguniang/article/details/83546596

https://www.cnblogs.com/zhibei/p/12915353.html

点滴分享,福泽你我!Add oil!



https://wap.sciencenet.cn/blog-3428464-1247388.html

上一篇:Python绘图matplotlib--plt
下一篇:Spyder的IDE中关于“from module import *” 警告与正反斜杠
收藏 IP: 211.162.81.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 10:00

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部