少说话多写代码之Python学习040——类02(类的函数和方法 )

栏目: Python · 发布时间: 5年前

内容简介:在类里定义函数时的self参数,其实是方法和函数的区别。在类里定义方法时,一般都在方法里加一个默认的参数,可以是,a,c,d的。但是约定俗成就统一叫self。self表示的是这个类的当前实例,一个类有多个实例,那么它属于自己所属于的实例,不会存在实例宁缺的self会指向实例陈皮皮。这里比价特别的是,可以把一个普通函数绑定到方法上使用,普通函数是没有self的,看下面代码,

在类里定义函数时的self参数,其实是方法和函数的区别。在类里定义方法时,一般都在方法里加一个默认的参数,可以是,a,c,d的。但是约定俗成就统一叫self。self表示的是

这个类的当前实例,一个类有多个实例,那么它属于自己所属于的实例,不会存在实例宁缺的self会指向实例陈皮皮。

这里比价特别的是,可以把一个普通函数绑定到方法上使用,普通函数是没有self的,看下面代码,

class myClass:
    def myMethod(self):
        print('这是我的一个方法,没毛病')

def myMethod2():
    print('这不是我的一个方法,我也懵了...')

instance=myClass()
instance.myMethod()

instance.myMethod=myMethod2
instance.myMethod()

输出

这是我的一个方法,没毛病
这不是我的一个方法,我也懵了...

这里的sefl参数不依赖于调用方法的方式。

class bird:
    song='快黄快割!'
    def sing(self):
        print(self.song)

abird= bird()
abird.sing()
birdsong=abird.sing
birdsong()

输出

快黄快割!
快黄快割!

变量birdsong引用了绑定方法abird.sing上,访问birdsong还是会对self参数进行访问。

我们在学习类的时候,有一个概念,私有和公有。私有的元素(包括字段,方法)只能在类的内部访问,公有的元素才可以被其他类调用。一般一个类中如果提供给其他类访问的属性,

都会对该属性提供get和set方法,通过他们修改自己的元素。

比如,

class Person:
    last_name='小白'
    def setName(self,value):
        self.last_name=value

    def getName(self):
        return  self.last_name

xiaoLi =Person()
print(xiaoLi.last_name)

#错误调用
xiaoLi.last_name='小李'
print(xiaoLi.getName())

#推荐调用
xiaoLi.setName('小李(正宗的)')
print(xiaoLi.getName())

输出

小白
小李
小李(正宗的)

比如下面的方法,希望_inaccessible不能让外面的类访问到。如果外面的类访问,我提供accessible给他们调用。那么怎么办?

class Secretive:
    def _inaccessible(self):
        print('秘密,不能看')

    def accessible(self):
        print('秘密的内容是:')
        self._inaccessible()

s1= Secretive()
s1._inaccessible()
s1.accessible()

输出

秘密,不能看
秘密的内容是:
秘密,不能看

其实只要将不想被别人访问的方法置为私有即可,在 Python 中对方法前加两个下划线,就将方法置为私有了,如下面操作。

class Secretive2:
    def __inaccessible(self):
        print('秘密,不能看(我是私有方法啦)')

    def accessible(self):
        print('秘密的内容是:')
        self.__inaccessible()

s2= Secretive2()
#s2.__inaccessible()
s2.accessible()

这样,如果访问__inaccessible,会报如下异常。

Traceback (most recent call last):
  File "D:/work/Python/Class2.py", line 70, in <module>
    s2.__inaccessible()
AttributeError: 'Secretive2' object has no attribute '__inaccessible'

访问accessible,可以正常输出如下,

秘密的内容是:
秘密,不能看(我是私有方法啦)

工程文件下载: https://download.csdn.net/download/yysyangyangyangshan/10777216


以上所述就是小编给大家介绍的《少说话多写代码之Python学习040——类02(类的函数和方法 )》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新

创新

理查德·福斯特 / 王宇锋 / 中信出版社 / 2008-10 / 32.00元

《创新:进攻者的优势》内容简介:为什么一流企业突然间将它们的市场拱手让与新的竞争者?要避免这样的命运,需要无情地抛弃那些过去使它们成功的技能和产品,那么究竟哪些企业能够做到这一点呢?企业如果总是墨守成规、因循守旧,那么长期下去,必然无法以市场的速度及规模进行革新或创造价值。这样的企业会像得州仪器、施乐等市场领先者一样,被一些资源较少、技术较差、市场支配力较弱的竞争对手超越,而这些所谓进攻者的优势,......一起来看看 《创新》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换