Python新手学习面向对象编程基础,创建类和实例化详细讲解

现在都流行面前对象编程。文字介绍可能看得很晕,看不懂和不理解当然看得晕,不用怕,慢慢看到最后你会有所收获。

如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。

面向对象编程(Object Oriented Programming),简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。我们将详细介绍Python的面向对象编程。

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

python新手学习面向对象基本特征:

在Python中,定义类是通过

class

关键字,class后面紧接着是类名,即ClassName,类名通常是大写开头的单词。我喜欢驼峰式写法首字母都大写。

定义类:

第一种类名后面直接跟冒号。

第二种类名后面跟小括号再冒号。

第三种类名后面括号中object再跟冒号。

三种的关系:第一种和第二种程序会默认就是第三种,第一种和第二种只是简写。如果没有继承自定义的类,就可以这样写。

如果要继承自定义的类就不能够简写。

(object)

,表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用

object

类,这是所有类最终都会继承的类。

比如你有个类叫object1,你想继承object1,你用简写就直接继承程序默认的object。

方法:事实它就是一个函数,只不过在类中定义的时候叫方法。

属性:事实它就是一个变量,只不过在类中定义的时候叫属性和有点不同。

构造函数:__init__()该方法在类实例化时会自动调用,又叫初始化方法。

其中构造方法有两个参数(id 和 age),self.id和self.age就是两个属性。

实例化对象:

创建多一个方法output(),打印构造函数的属性。

创建实例:

输出结果:

self代表类的实例,而非类

类的方法与普通的函数只有一个特别的区别:

在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表的是类的实例。

self的名字并不是规定死的,也可以使用this,但是最好还是按照约定是用self。

self就是实例化op自身,其中self.name可以等同op.name。

以后再创建一个xh= ClassName('小红',18),这个时候self就是xh。

注意点:

注意到

__init__

方法的第一个参数永远是

self

,表示创建的实例本身,因此,在

__init__

方法内部,就可以把各种属性绑定到

self

,因为

self

就指向创建的实例本身。

有了

__init__

方法,在创建实例的时候,就不能传入空的参数了,必须传入与

__init__

方法匹配的参数,但

self

不需要传,Python解释器自己会把实例变量传进去。

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods

继承:Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义。

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

继承和方法重写:

定义一个People人类,用Student学生类继承People人类。

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法。子类只需要写一个跟父类相同的方法(函数)就可以覆盖重写。

输出结果:

总结概论:

class关键字后面跟类名,继承就在小括号里面输入需要继承的类名。

__init__()构造函数该方法在类实例化时会自动调用。比如你从外面回来要进家之前要用钥匙开门,这个步骤就是初始化。

__del__()析构函数,释放对象时使用。比如你每次锁门要出去,析构函数默认你锁上门就完了。突然有一次抽风对门说:芝麻关门。析构函数就是程序执行完之前要做的最后一件事。

self的名字并不是规定死的,也可以使用this,但是最好还是按照约定是用self。

子类方法和父类方法相同,子类方法会覆盖父类方法。

继承用个例子说:

定义一个商场类和一个人类,人类继承商场类。

实例化对象:

输出结果:

分析例子:

商场类中有两个方法分别是买和卖。人类中只有一个go()方法。人类继承商场类中两个方法。所以后面的实例化对象中都是人类People():

xm.buy()是父类的商场类的方法,由于继承的关系,所以可以直接使用。

xh.go()是人类People()中本身方法。

xh.sell()是父类的商场类的方法,由于继承的关系,所以可以直接使用。

基础的面向对象能够了解:定义类、构造函数、方法、属性、私有化、方法重写、继承这几点就算入门,其实还有很多高级的用法。再python深入学习中逐渐掌握。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190102A00C4J00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券