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.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等属性绑上去:这里注意:(1)、__ init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__ init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)、有了__init __方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init __方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:class Student(object): def __init__(self, name, score): self.name = name self.score = score
>>>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