百木园-与人分享,
就是让自己快乐。

Python学习日记(十三)

类和对象

    • 属性(静态)+方法(动态),封装了属性和方法
    • 其中的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。


来源:https://www.cnblogs.com/feiyuyu/p/15978531.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python学习日记(十三)

相关推荐

  • 暂无文章