ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python学习日记(十三)

2022-03-07 23:00:18  阅读:179  来源: 互联网

标签:__ name Python self class 十三 方法 日记 def


类和对象

    • 属性(静态)+方法(动态),封装了属性和方法
    • 其中的self相对于this指针,即绑定方法,有了这个参数,Python可以分清哪个对象在调用方法,可以认为在方法中的self其实就是实例对象的唯一标志。
    • class 类名:
          属性
          方法
          
      例如:
      class Animal:
          height=1.8
          weight=50
          
          def Eat(self):
              print("吃东西...")
          def Sleep(self):
              print("睡觉觉...")

 

  • 对象
    • 对象=类名()
    • 创建对象的过程也叫类的实例化
    • 调用类里的方法可用对象.方法
    • animal=Animal()
      animal.Eat()
      animal.Sleep()

       

  • 面向对象的方法的特性
    • 封装:将属性和方法封装在对象中,只给外部提供一个接口进行访问和操作
    • 继承:子类自动共享父类方法和属性
      class 子类(父类):
          自身属性
          自身方法
          
      class fish(Animal):
          color='金色'
          def Swim(self):
              print('游泳...')
      
      f=fish()
      f.Eat()
      f.Sleep()

       

    • 多态:不同对象对同一方法做出不同反应

      class A:
          def speak(self):
              print("我是A")
      
      
      class B:
          def speak(self):
              print("我是B")
              
      a=A()
      b=B()
      a.speak()
      b.speak()
      我是A
      我是B

       

    • __init__(self,param1,param2,...)
    • 实例化对象时可以传入参数,传入的参数会传入到_init_中进行参数初始化工作,我们可以重写这个方法自定义初始化工作
    • 类在实例化对象后这个函数会被自动调用
    • class Ball:
          def __init__(self,name,num):
              self.name=name
              self.num=num
          def speak(self):
              print("我叫%s,我的学号是%d"%(self.name,self.num))
      a=Ball('A',11)
      a.speak()
      我叫A,我的学号是11
      

       

    • 公有和私有
    • name mangling:名字改编,名字重整
    • 在Python中定义私有变量只需要在变量名或函数名前加上”__"两个下划线,那么这个变量或函数就是私有的
    • 可通过在对象中定义方法给外部接口访问私有变量
    • Python事实上是采用一种叫“name mangling”技术,将以双下划线开头的变量名巧妙的改了个名字而已,我们仍然可以在外部通过“_类名 __变量名”的方式访问:
    • class Ball:
          __size=66
      a=Ball()
      a.__size
      Traceback (most recent call last):
        File "E:\大三冬\PYTHON\class2.py", line 4, in <module>
          a.__size
      AttributeError: 'Ball' object has no attribute '__size'
      
      class Ball:
          __size=66
          def getsize(self):
              return self.__size
      a=Ball()
      print(a.getsize())
      66
      
      
      a._Ball_size
      66

       

 

 习题:

1.按照以下提示尝试定义一个矩形类并生成类实例对象。

属性:长和宽
方法:设置长和宽 -> setRect(self),获得长和宽 -> getRect(self),获得面积 -> getArea(self)
提示:方法中对属性的引用形式需加上self,如self.width

class Rectangle:
    length = 5
    width = 4

    def setRect(self):
        print("请输入矩形的长和宽")
        self.length = float(input("长:"))
        self.width = float(input("宽:"))

    def getRect(self):
        print("这个矩形的长是:%.2f,宽是:%.2f" % (self.length, self.width))

    def getArea(self):
        return self.length * self.width

 

 

总结:

1、由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__ init__方法,例如在Student类时,把name、score等属性绑上去:
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
这里注意:(1)、__ init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__ init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)、有了__init __方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init __方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:
>>>student = Student("Hugh", 99)
>>>student.name
"Hugh"
>>>student.score
99

另外,这里self就是指类本身,self.name就是Student类的属性变量,是Student类所有。而name是外部传来的参数,不是Student类所自带的。故,self.name = name的意思就是把外部传来的参数name的值赋值给Student类自己的属性变量self.name。

标签:__,name,Python,self,class,十三,方法,日记,def
来源: https://www.cnblogs.com/feiyuyu/p/15978531.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有