美文网首页
Python之属性和方法的理解

Python之属性和方法的理解

作者: 5cb608806559 | 来源:发表于2020-09-13 23:31 被阅读0次

    我们有同学问:为什么在Python进行调用时,有时候要加括号而有时不需要加括号呢?简单粗暴地说,没加括号的就是调用的属性,而加了括号是调用的方法。

    为了帮助大家理解属性与方法,我们只在这里简单聊一聊面向过程与面向对象的编程思想。(如果希望了解更多可以查看三大主流编程思想介绍)

    面向过程的编程思想

    面向过程(简称PO)是一种以过程为中心的编程思想。
    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    举了栗子:下雨的时候,人们为了防止被雨淋湿打开了雨伞。
    采用面向过程的思想解析:
    步骤是:下雨了,打开伞,挡雨,都是动词
    编码实现:fall(),open(),prevent(),这 3 个函数一一对应上行的步骤。

    面向对象的编程思想

    面向对象(简称OO)是一种以事物为中心的编程思想。
    面向对象是把构成问题事务分解成各个对象万物皆对象,世界上任何一个事物都可以看成是一个对象。一般的,我们通过描述属性(特征)和行为来描述一个对象的。比如家里的小狗,它的颜色,大小,年龄,体重等是它的属性或特征。它会汪汪叫,会摇尾巴等是它的行为。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

    还是刚才的栗子:下雨的时候,人们为了防止被雨淋湿打开了雨伞。
    采用面向对象的思想解析:

    • 对象:我 、伞、 雨,都是名词
      编码实现:me,umbrella,rain
    • 对象的行为:我可以打开伞、伞可以挡雨、雨可以落下
    • 以实际情况安排对象行为的顺序:雨落下,我打开伞,伞挡雨。
      编码实现:rain.fall(),me.open(),umbrella.prevent()

    在python中,一个对象的特征也称为属性(attribute)。它所具有的行为也称为方法(method)。我们可以这样理解:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class)。比如人类,动物,植物等等,这些都是类的概念。

    属性

    在python中,属性分为公有属性和私有属性,公有属性可以在类的外部调用,私有属性不能在类的外部调用。公有属性可以是任意变量,私有属性是以双下划线开头的变量。

    下面我们定义一个People类,它有一个公有属性name,和一个私有属性__age。

    class People():
      def __init(self):
        self.name = 'Alice'
        self.__age = 24
    

    我们创建一个People类的实例p,当我们调用它的私有属性__age时发现有如下错误。

    p=People()
    print(p.__age)
    
    错误提示信息:
    AttributeError: 'People' object has no attribute '__age'
    

    这就说明了私有属性不可以在类的外部使用。那么我们要想调用私有属性的值,就可以在类的内部通过定义一个方法来调用。

    方法

    在People类的内部定义一个showage方法来调用私有属性__age的值。

    class People():
      def __init__(self):
        self.name = 'Alice'
        self.__age = 24
    
      def showage(self):
        print(self.__age)
    

    调用showage()方法实现私有属性__age的输出。

    p=People()
    p.showage()
    
    输出结果:
    24
    

    使用第三方库时,哪些是私有的属性,哪些是公有的属性是在作者创建的时候就已经定义好的。所以我们在进行调用时,需要按照他们提供的官方文档的说明来使用。就好比厂家已经生产好了产品,如果我们想使用它,就必须需要按照他们提供的说明书进行操作是一样的道理。

    相关文章

      网友评论

          本文标题:Python之属性和方法的理解

          本文链接:https://www.haomeiwen.com/subject/ybvoektx.html