前面一片文章我介绍了python面向对象的基本知识,链接在此初步解释了面向对象和面向对象的优点,今天就开始正式用代码来展现面向对象。
1、利用class创建类
Python中,创建类的语句是如下所示
先解释一下,class后面跟的是类名,括号里面是基类(也成为父类)python3中默认继承object。里面的函数称为方法(注意,严格来说,python中,位于类里面的def语句才能被称为方法,而在类外面定义的def只能被称为函数)。示例如下
2、定义类的属性,
我们讲了类是有属性的,那么如何定义类的属性,有以下两种种:
1、 直接在类里面定义
这里属性是位于类的变量空间里面,整个类中可以直接访问
2、 在构造函数里面定义
这是对象的属性,访问时要通过self访问。
3、构造函数__init__
类是由属性构成的,当我们在定义一个类的时候,我们需要对类的属性进行设置,这时候就用到了构造函数:__init__(self,[……]),我们在构造函数中的参数是赋值给self,因为在oop中,self就是实例对象,name、age、weight变成了状态信息。
我们接上面说为什么它继承object,通过dir()我们可以打印出他的属性,发现他继承了很多方法,在后面的使用中会比较方便。(这里涉及到了新式类和老式类的问题,在python3中全都是新式类,新式类更加强大)。
4、访问控制
Python不像Java中有明确的访问控制方法,说白了就是没有访问控制。不过有一套约定俗成的方法:全靠自觉
变量名前面无下划线,可以公开访问
变量名前面带有一个下划线:类的私有属性
变量名前面带有两个下划线:部分私有属性,类里面可以访问,实例化之后不能直接访问。
再说一遍:全靠自觉!其实它们无论怎样都是可以访问的。这样只是代码规范,方便以后的代码维护。
5、定义类的方法
函数和方法的区别:前面我讲过,python在类中的def才能被称为方法,因为函数和方法的区别就是它们是否依附于一个类。
函数直接通过函数名调用,方法通过类实例化调用,方法是类的一个属性。
方法的访问控制和类的属性一样,也是没有,定义方法也就差不多,如下:
绑定方法:
你们可能注意到了,每个方法中 都有self,这个self是绑定类的,表示函数是类的属性。
self 变量用于在类实例方法中引用方法所绑定的实例。因为方法的实例在任何方法调用中总是作为第一个参数传递的,self 被选中用来代表实例。你必须在方法声明中放上 self(你可能已经注意到了这点),但可以在方法中不使用实例(self)。如果你的方法中没有用到 self , 那么请考虑创建一个常规函数,除非你有特别的原因。毕竟,你的方法代码没有使用实例,没有与类关联其功能,这使得它看起来更像一个常规函数。在其它面向对象语言中,self 可能被称为 this。
方法装饰器:
@classmenthod类方法,调用的时候用类名,不是先生成对象,由对象调用
@property像访问属性一样调用方法,就是指不用加括号了。
如下:我在上面的那个类里面加了两个方法,用了这两个修饰器。
使用方法如下:
下一篇介绍类的继承、运算符重载(钩子)等。欢迎关注。
领取专属 10元无门槛券
私享最新 技术干货