类和对象
- 类
- 属性(静态)+方法(动态),封装了属性和方法
- 其中的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.widthclass 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
本站部分图文来源于网络,如有侵权请联系删除。