Python的面向对象、Class 概念与使用

简介:

Class(类)的基本概念:


  • 类:将同一种具体事务的共同点抽象出来的表现,Python的类是一种可调用对象。

  • 类中定义的有方法,变量,数据结构。

  • 变量则是类属性本身是没有数据的,只有在实例化的时候将数据引入。

  • 方法就是函数;是操作变量引用的数据的代码,可以知道方法是操作数据的,由于类中不包含数据,所以类无法调用方法,只有实例化引入数据成为实例(也称为对象)才可以调用方法。

wKioL1W3YdqgRLUdAAJpUMeMzr4546.jpg

对象的由来:

wKiom1W3U_6wTo4rAABqBLMXMjw257.jpg

  对象(也称为实例)本身是没有方法的,对象引用的方法是在类中定义的也叫类函数,或者叫接口。

同属一类实例化的对象,具有相同的功能。  


类的执行场景:

当定义一个类时,类中的代码是不会执行的,只有在实例化时才会执行。 实例化过程中,类的方法不会执行,只有当实例调用方法的时候才会执行。


类对象是可调用对象,实例对象则是可以调用其中的方法。


类间关系:

依赖:一个类的方法操作另一个类的对象,如果另外一个类的对象没有被实例化出来,这个类就无法执行。


聚合:类A的对象包含类B的对象


继承:描述特殊与一般关系


面向对象的模型机制的3个原则:

封装(package)

隐藏实现方案细节,将代码及其处理的数据绑定在一起的一种编程机制,用于保证程序和数据不受外部干扰且不会被误用。


继承(Inheritance)

通过继承,子类对象可以获得父类对象的属性,一个深度继承的子类继承了类层次中它的每个祖先的所有属性。 (超类、父类、基类)都是同一个概念

在子类中调用一个属性的时候,如果在本类中没有,就会一直向上找父类。


多态性(Polymorphism)

允许一个接口被多个通用的类动作使用的特性,具体使用哪个动作与应用场合相关,相当于一个接口多个方法。

概念理解:对于某一个类而言,当传递给它的是不同的数据,却能完成多钟不同的运算。为了实现同一个目的,而定义同一个接口,背后却有多种不同的实现。 能够自动判断调用哪种实现的这种机制就叫做多态。

作用:降低程序的复杂性 


开始一个类程序:

wKiom1W3Y2jD-xxbAAKhg-tD9cw397.jpg


类方法中的这个self是用于标识实例本身的。 任何一个类方法都应该以self开始。


通过实例调用方法相当于调用所属类的方法来处理当前实例

1
2
3
4
In [ 16 ]: ins1.setdata( 'hello python class' )
 
In [ 17 ]: ins1.printdata()
hello python  class

同等于这样写

1
2
3
4
In [ 20 ]: TestClass.setdata(ins1, 'aabbcc111222333' )
 
In [ 21 ]: TestClass.printdata(ins1)
aabbcc111222333


在setdata方法调用之前,MyClass类不会把name属性附加到实例ins1上,当然也可以重载__init__创建构造器直接为实例提供。

wKiom1W3Zi7gup3FAAFxzwTS0TE865.jpg


Python 构造函数(别名:构造方法、构造器)

在Python中每一个类都有一个构造器方法__init__,构造方法会在实例化时从类名接受一个参数传给类方法,这样就可以直接在类初始化时给方法传参。


构造器在构造实例时传参,直接构造实例属性。 

wKiom1W3Z3LDXBLoAAH_OJbmS8M620.jpg


构造器是创建实例属性最便捷的方式


__varname__ : 这类方法在某种场景下,Python解释器会自动调用它们。

当执行 a + b 程序会自动调用 a.__add__(b)

当执行 l2 = [1,2,3] 程序会自动调用 list.__init__()


析构:用于销毁一个实例,解释器会自动垃圾回收,所以一般很少用析构函数。

wKiom1W3atGgKcSUAAG9uXk1iN4070.jpg


获取类中的所有可用属性和可用方法,可以使用__dict__类的字典属性,或者内置函数dir。

wKioL1W3bVqCwhcgAAEtQ3Xk-6g291.jpg

-------------------------------------------------------------------------------------------

wKiom1W3a6LCbGTZAAFV59FFboM654.jpg

获取实例属性和方法

wKioL1W3bcqyNI1bAAC60lyO2j8947.jpg


方法的可用变量

实例变量:指定变量名称及实例自身进行引用 self.变量名

局部变量:方法内部创建的变量,可直接使用

类变量(也称静态变量):通过指定变量名与类名进行引用 

全局变量:直接使用

wKiom1W3bULjGrzpAAGJqFY4zNo726.jpg


类的继承

继承描述了基类的属性如何"遗传"给子类,子类可以继承它的基类的任何属性,包括数据属性和方法,一个未指定基类的类,其默认有一个名为Object的基类,Python允许多重继承能并行继承多个父类。

wKiom1W3blPw486IAAD0XjdhrQM687.jpg


实现子类继承构造方法

wKioL1W3cJ-SDbimAALkSkEpCk4571.jpg


Python中几乎所有属性的获取都可以使用 "object.attribute",的格式。 

此表达式会在Python中启动搜索—— ——搜索连续的树

Class 语句会产生一个类对象,对Class的调用会创建实例,实例会自动连接至创建了此实例的类。


类连接至其超类的方式

    继承就是由下至上,由左至右搜索此树来寻找属性名称所出现的最低的位置。

wKiom1W3b4vgJ5rfAABJjv6pAgQ952.jpg


继承方法的专用化

继承会先在子类寻找变量名,然后才查找超类,因此,子类可以对超类的属性覆盖来取代继承而来的方法。也可以通过已覆盖的方法回调超类来扩展超类的方法

wKiom1W3cGLQl77PAAHsWCF0uyE785.jpg

类、实例和其他对象的内建函数

issubclass()

布尔函数,判断一个类是否是另一个类的子类

1
2
In [ 38 ]:  issubclass (Two_Class,One_Class)
Out[ 38 ]:  True

isinstance

判断一个对象是否为一个类的实例

1
2
In [ 42 ]:  isinstance (ins2,Two_Class)
Out[ 42 ]:  True

hasattr()

判断一个对象(实例)是否拥有指定的属性

1
2
3
4
5
In [ 46 ]:  hasattr (ins2, 'data_one' )
Out[ 46 ]:  True
 
In [ 47 ]:  hasattr (ins2, 'data_two' )
Out[ 47 ]:  True


本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1679372


相关文章
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
334 2
|
1月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
274 1
|
8月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
Python
Python面向对象(2)
【10月更文挑战第14天】
151 6
Python面向对象(2)
|
11月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
12月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
409 8
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
123 2
Python面向对象
|
Go C++ Python
Python Tricks: String Conversion(Every Class Needs a ___repr__)
Python Tricks: String Conversion(Every Class Needs a ___repr__)
92 5
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
111 7
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象

推荐镜像

更多