zoukankan      html  css  js  c++  java
  • Python中类的创建和self的作用

    类的创建

    我们以人类来举例,人类都有哪些共同点呢?两条胳膊、两条腿、直立行走、有着各种颜色的头发、说着各式各样的语言等。这些共同点分为两类:

    1. 特征:两条胳膊、两条腿、有着各种颜色的头发
    2. 行为:直立行走、说着各式各样的语言

    在 Python 的类中,我们把这种特征和行为分别称为 属性(attribute)和 方法(method)。现实生活中的“类”是我们归纳总结出来的,而 Python 中的类需要我们自行创建。接下来我们看看如何创建一个类。

    编程练习

    我们来试一试模仿刚才“人类”的写法,在 Python 中写一个“鸟类”。

    要求:

    • 创建一个类,类名为 Bird;
    • 给“鸟类”创建一个属性,名为 wings(翅膀)并赋值为 2;
    • 给“鸟类”创建一个方法,名为 fly(飞),该方法的功能是打印 我会飞。

    class Bird:
    wings=2
    def fly(self):
    print('我会飞')

    进一步要求:

    1. 实例化 Bird 类;
    2. 访问属性 wings 并打印出 我有 2 只翅膀;
    3. 调用方法 fly()。

    bird=Bird()
    print('我有{}只翅膀'.format(bird.wings))
    bird.fly()

    self 的作用

    在 Python 的类中,self 表示创建的实例本身。

    在类的方法里直接访问类的属性是不行的,那要怎么办呢?我们说过,访问类的属性要先实例化,然后通过 实例名.属性 进行访问。

    但在类的方法内访问类的属性时,类的实例还没被创建。这时,self 就出现了,它的作用是代替实例本身,所以上面的例子正确的写法应该是这样:。

    class Human:
      arms = 2
      legs = 2
      hair = '各种颜色的头发'
    
      def walk(self):
        print('直立行走')
    
      def speak(self):
        print('说着各式各样的语言')
    
      def intro(self):
        # 类的方法里访问类的变量
        print('人类有%d条胳膊%d条腿' % (self.arms, self.legs))
        #此处错误的写法是:
    #
    print('人类有%d条胳膊%d条腿' % (arms, legs))
    # 类的实例化 human = Human() human.intro() # 输出:人类有2条胳膊2条腿

    当执行 human.intro() 这行代码时,Python 会将 human 作为第一个参数偷偷传递给 self,这样我们就不再需要传入第一个参数,并能通过 self 访问类的属性和方法了。

     self 在定义方法的时候必须有,调用方法的时候要忽略。

    再举一个例子,要求:

    • 添加一个名为 intro 的方法;
    • intro() 方法里先访问 wings 属性打印出 我有 2 只翅膀,再调用 fly() 方法打印出 我会飞。

    class Bird:
    wings = 2

    def fly(self):
    print('我会飞')

    def intro(self):
    print('我有{}只翅膀'.format(self.wings))
    self.fly()

    bird=Bird()
    bird.intro()

    再举一个例子:

    class Saiyan:
    born_place='贝吉塔行星'
    character='天生好战性格暴躁'

    def transform(self):
    print('变身巨猿')
    print('赛亚人出生于{},{}。'.format(self.born_place,self.character))

    saiyan=Saiyan()
    saiyan.transform()

  • 相关阅读:
    kill新号专题
    LSB 简介
    linux之eval用法(高级bash程序员的必修之技)
    squid日志配置与轮询
    004_ssh连接慢的问题的解决?
    python操作redis-set
    python操作 redis-list
    python操作redis-hash
    python操作redis--string
    python连接redis002
  • 原文地址:https://www.cnblogs.com/mingzhuqi/p/13264501.html
Copyright © 2011-2022 走看看