从1开始学python_3-面向对象
前言
像前面介绍的那样一样,这个是针对有过Java基础的来看的,所以在学习python面向对象之前,你要有面向对象的思想,知道为什么要面向对象(封装),以及写过一些面向对象的例子,而这里只是介绍一下python中面向对象的语法。
1. 建立一个类
在python中建立一个类也是使用class关键字,后面跟一个类名,类名的命名规则可以参考大驼峰命名法。代码如下:
class Cat:
def eat(self):
print("eat...")
上面代码就实现了建立一个Cat的类,并且有一个eat的方法,至于eat中的第一个参数self含义可以参考后面。
建立一个类后,就是使用这个类了,使用类创建对象: cat =Cat(),这样就创建了一个cat对象,然后你可以使用cat.eat()调用eat方法。
2. 类的初始化方法
在Java中有构造函数,在python中有一个初始化函数,这个函数每个类都默认有,即使你不写,系统也会自动帮你生成一个。但是你可以自己书写一个初始化方法,这样每次你在使用该类创建一个对象的时候就会使用该方法做些初始化操作,代码如下:
class Cat:
def __init__(self):
print("in init")
def eat(self):
print("eat...")
这样的话,你每次建立一个cat对象,就会默认执行init中的代码,并且这个函数的名字必须叫做 init。
3. self是什么
如果有过Java基础,应该就熟悉this,其实这个self就类似于this,他代表的就是当前对象,比如你使用猫cat调用eat方法,那么这个self和这个cat是同一个引用,也就是你对self进行操作,就相当于对那个cat进行的操作。
3. 类的属性和方法
在python中给一个对象增加一个属性可以直接对象.属性=值即可,但是这样不符合面向对象,因为你这样只给一个对象增加了属性,而其他的对象没有,所以在python中不推荐这样,而正常情况下我们是把类的属性的赋值放在初始化函数里面完成,比如猫有颜色和品种两个属性,那么你就可以在init函数中给self添加一个颜色和品种。
def __init__(self):
self.color = "red"
self.type = "加菲"
这样的话就对所有的猫,一旦其初始化,那么就会有一个名字和一个品种。但这样由于把颜色和种类都写死了,所以并不好,所以你可以在init中加两个参数,然后在函数中进行赋值就行了。
def __init__(self,color,type):
self.color = color
self.type = type
但是类似于构造函数,你在构造一个对象的时候要传入参数cat = Cat(“red”,”加菲”),否则程序会报错。
类的方法,类的方法就像普通方法一样,只是所有类的方法都要多一个self参数,这个参数可以用来代表当前对象,仅此而已。
4. 类中的一些默认方法
上面讲过init方法,其实就是一个默认的方法,只要你不对其重写,那么系统是会帮你生成一个默认的,除此之外还有str、del方法,其中str方法功能就类似于java中的tostring,你在直接print一个对象的时候,他会使用str的返回值作为输出。你可以对其进行重写。
def __str__(self):
# 必须返回一个字符串
return "a cat obj"
同样的del是在这个对象呗销毁后会自动被调用,你可以在这里面写一下在对象销毁前需要做的事情。
5. 私有属性和方法
类似于Java中的private一样,在python中也可以进行私有属性或者方法的声明,二者都是把变量名的名字特殊化就行了,在oython中变量名,方法名,都代表私有的。比如你在init方法中进行属性初始化,你可以把这个属性私有化,这样外部就不能访问了,如下。
def __init__(self):
# 私有属性在外面不能使用
self.__priva = "xx"
下面是一个私有方法。
def __private(self):
print("this is a private function ,it only is used in the inside of the class")