面向对象编程-python

简介: 面向对象编程-python

面向对象编程


  • 一、面向对象的思想
  • 二、面向对象的两个重要概念:类和对象
  • 1.对象和类的概念
  • 2.对象详解
  • 3.类的详解
  • (1)属性详解
  • (2)类的方法详解


一、面向对象的思想


面向对象是一个抽象的编程思维,很多编程语言都有的一种思想,Python是纯的面向对象的语言,简单来说可以理解为注重如何解决问题,而不是去研究底层怎么实现。


面向对象和面向过程是两种不同的思想,面向对象编程的语言有Python等语言,面向过程编程的语言有C等语言,在写代码的编程思维是不同的。


举个例子来理解这两种思想,拿洗衣服为例。

用手洗衣服一般是这么干的:找盆-放水-加洗衣粉-浸泡衣服-搓洗-拧干-冲洗-拧干-晾晒。

这是一种面向过程的思想,一旦中间哪个环节不知道怎么办,洗衣服就洗不好,比如说你不知道怎么搓洗导致衣服洗不干净,比如说搓洗完之后没有拧干直接晾晒导致一地水等等,某1个环节出错了,都达不到想要的洗衣服效果。


用洗衣机洗衣服一般是这么干的:打开洗衣机-把衣服放进去-加洗衣粉-按开始按钮-晾晒。

这是一种面向对象的思想,你不用知道把衣服放进去之后洗衣机是怎么洗的,你只要知道把衣服放进去后倒洗衣粉然后按按钮就可以了。


同样的,在编程语言当中,体现是不一样的,C语言写代码的时候你得关注着你的内存等底层东西,但Python写代码的时候我们几乎很少去关注底层的东西,注重点在于用什么方法去解决问题就可以了。


二、面向对象的两个重要概念:类和对象


1.对象和类的概念


这两个概念放在一起谈可能更容易理解一些,可以简单理解为类是产生对象的模板

上面我们说过洗衣机的例子,如果说洗衣机是对象,那么制造这种洗衣机的图纸就是类;如果说鸡蛋是对象,那么母鸡就是类;如果说狗是对象,那么狗类就是类。

在Python中,万物皆对象,变量是对象,函数是对象,字符串、列表、元组等等都是对象。


2.对象详解


(1)对象的组成: 对象=属性+方法

对象是由属性和方法组成的,属性可以理解为对象有什么,方法可以理解为对象能做什么。

(2)对象的属性有哪些特征

  • 对象的属性可以是抽象的属性

比如说洗衣机是一个对象,那么洗衣机是有颜色的,颜色就是1个属性,但颜色是个抽象东西,因为它可以是红色、白色、黑色等等颜色。


  • 对象的属性可以是另一个对象

比如说计算机是1个对象,那么计算机有硬盘,硬盘就是计算机的一个属性,所以说对象的属性可以是另一个对象。


  • 大对象由小对象所组成

比如说鼠标是一个对象,鼠标的滚轮是1个对象,鼠标里面的单片机是1个对象等等,你会发现,鼠标这个大对象是由多个小对象组成。


3.类的详解


上面有提到过,类是产生对象的模板,那么类就是对象的抽象化,对象是类的具象化。

既然 对象=属性+方法,同样的,类=属性+方法。


(1)创建类

创建类的方法:

class 类名:
  属性1
    属性2
    方法1
    方法2
#1个类中可以有多个属性和方法,也可以只有属性或者只有方法 


举例,创建1个学生类,并使用它创建对象

#创建Student类
class Student:
    name = "小明" #学生类的name属性
    age = 18  #学生类的age属性
    def learn(self):  #学生类的learn方法
        print("学生的学习方法被调用了")
#创建Student类的对象
s1 = Student() #Student()就是创建的1个类对象,只是便于简写,我把它传给了s1
s1.learn()  #对象的方法
print(s1.age) #执行对象的属性
#上面这两行代码其实可以直接写成Student().learn() ,也同样是利用类创建了对象并调用对象的方法


执行结果:

学生的学习方法被调用了
18


其实创建Student类的对象时,后面的3行代码还可以写成这样,效果是一样:

Student().learn() #创类的对象并使用对象的方法
print(Student().age)  #创建类的对象并执行对象的属性


回过头来,我们再从代码和概念结合的角度来理解一下什么是属性和什么是方法。


类属性就是类里面有什么,比如说类里面有name和age,所以name和age是Student这个类的属性。


类方法是类能做什么,比如说类里面有learn(self)这个函数,它能执行“学生的学习方法被调用了”,也就是这个类能执行什么能干什么,所以learn(self)这个函数就是类的方法。


(1)属性详解


我们前面介绍过对象的属性和类的属性,那么我们来看一下两者的区别和特征。

  • 类属性
1. 类属性定义在类的内部,任何方法之外
      1. 创建类的时候直接创建
      2. 类名.新的属性名=属性值
2. 使用类属性:
    1. 对象.类属性
    2. 类.类属性
3. 类属性的特点:
    1. 类属性是属于类对象的
    2. 对象共用类属性。如果类属性变化,所有的对象也会改变
4. 类属性有且只有一份,牵一发而动全局


  • 对象属性
对象属性定义在方法内部
1. 创建
    1. 对象.实例属性名=属性值
    2. 方法内部创建:self.属性名 = 属性值
2. 使用对象属性
    对象.实例属性名
3. 对象属性各自拥有互相独立
4. 对象属性和类属性发生命名冲突
    1. 以对象属性名优先
    2. 对象属性名会遮蔽同名的类属性


(2)类的方法详解


  • 类方法的声明
def 函数名(self,参数1,参数2,....)


  • self
1.self默认传递,不需要传值
2.self指代的是当前的实例(对象)
3.一定会有self传递,但名字不一定必须叫self,可以叫aa
4.self后面可以跟多个参数,用“,”隔开
• 1
• 2
• 3
• 4
  • 方法的调用
1.对象.方法名(自动传递对象),例如 s2.fun1()
2.类名.方法名(类名()) #“类名()”相当于创建对象
注:方法的调用与函数类似,谁调用就返回给谁
  • 初始化的方法(特殊的类的方法)
def __init__():def __init__():  
1.这个方法不需要被调用,只要创建对象就会自动执行
2.这个方法只能返回None值,无法返回其他类型的值
3.如果要给init传递多个参数,只能通过 类名(多个参数) 的方式去传递
4.如果类里面没有定义init,默认去调用父类
5.如果类里面重复定义了多个init方法,会被最后一个init方法覆盖


举例:创建对象,查看默认执行的init并传递多个值;调用1个类的方法,确认该方法被调用并执行传递的值。

#创建类
class Student:
    name = "小莫"
    age  = "18"
    def __init__(self,aa,bb):
        print("init被调用了")
        print(aa)
        print(bb)
    def fun1(self):
        print("函数1")
        print(self)
    def fun2(self):
        print("函数2")
Student.fun1(Student(100,200)) #创建对象并传递多个值给init


执行结果为:

init被调用了
100
200
函数1
<__main__.Student object at 0x000001DAD8168400> #self值的存储地址


下一节预告:面向对象的三大特性-封装、继承、多态。



目录
相关文章
|
11天前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
19 2
|
11天前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
15 1
|
28天前
|
存储 Java 程序员
30天拿下Python之面向对象编程
30天拿下Python之面向对象编程
14 3
|
11天前
|
Java Python
Python学习六:面向对象编程(上)
这篇文章是关于Python面向对象编程的基础知识,包括类和对象的概念、实例方法、属性、self关键字以及魔法方法等。
14 0
|
1月前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
1月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
2月前
|
Python
Python 中的面向对象编程 (OOP)
【8月更文挑战第29天】
29 7
|
2月前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
2月前
|
Python
|
2月前
|
存储 Java C#
详解 Python 中的面向对象编程(2)
详解 Python 中的面向对象编程(2)
41 10