美文网首页
2021-12-11 Python-14

2021-12-11 Python-14

作者: MaggieXie | 来源:发表于2021-12-11 20:14 被阅读0次

面对对象编程与面向过程编程相对,是站在更加宏观的角度上看待问题。面向过程编程主要是通过一系列函数的顺序执行来解决问题。
而面向对象编程着眼于对象的集合,当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

引用网上一个简单易懂的问题。
2分钟让你明白什么是面向对象编程 - 知乎 (zhihu.com)

问题: 洗衣机里面放有脏衣服,怎么洗干净?
面向过程的解决方法:
1、执行加洗衣粉方法;
2、执行加水方法;
3、执行洗衣服方法;
4、执行清洗方法;
5、 执行烘干方法;
以上就是将解决这个问题的过程拆成一个个方法(是没有对象去调用的),通过一个个方法的执行来解决问题。

面向对象的解决方法:
1、我先弄出两个对象:“洗衣机”对象和“人”对象
2、针对对象“洗衣机”加入一些属性和方法:“洗衣服方法”“清洗方法”、“烘干方法”
3、针对对象“人”加入属性和方法:“加洗衣粉方法”、“加水方法”
4、然后执行
人.加洗衣粉
人.加水
洗衣机.洗衣服
洗衣机.清洗
洗衣机.烘干
解决同一个问题 ,面向对象编程就是先抽象出对象,然后用对象执行方法的方式解决问题。

在学习面向对象之前,需要了解几个概念。

类和实例:同一类的对象都有相同的属性和方法,每个类可以有很多的实例,这个过程就是类的实例化。以上面洗衣服为例,人可以作为一类,洗衣机也可以作为一类。类是比较抽象的概念,或者可以理解为哲学上物质和实体的关系。类是共性的概念,起到模板的作用。实体(这边指的是实例)是带有个性的东西。比如人这个类中,实例可以是你,我,他。
属性和方法:通过实例访问的变量就是属性,而类中的函数称为方法,一切关于函数的用法都适合于方法。
以具体的例子看看如何创建类和属性方法,以及如何创造实例。

#创建Car类
class Car():
    '''一次模拟汽车的简单尝试'''
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
    def get_descriptive_name(self):
        long_name=str(self.year)+' '+self.make+' '+self.model
        return long_name.title()

在第一行定义了名字为 Car 的类。一般俩说类的名称一般首字母需要大写。括号中是空的,因为这个类是从空白创建的。
第二行对类进行了简单的描述。
第三行调用了方法 init ,要注意两边是双下划线,每当根据 Car类创建新的实例时,Python 都会自动运行它。括号中有 4 个形参,self 是必不可少的,并且一定要位于最前面。self 是一个指向实例本身的引用,每次创建实例时,自动将实参 self 传递给形参 self,让实例能够引用类中的属性和方法。在创建实例的时候只需要传递 make model 和 year 三个值即可,self 会自动进行传递。
下一行中,self.make中的变量获取了形参make中的值。以self为前缀的变量可以在后面定义的类的方法中使用,任何类的实例都能进行访问。
此外 Car 类还定义了一个方法 get_descriptive_name来展现关于 Car的具体信息。括号中 self 不能少,最后返回了开头字母大写的long_name变量。
一般来说init方法不会显式包含 return 语句,会自动返回包含 Car 的实例。实例的命名一般是用小写的名称。

#创建实例,并访问属性和方法
my_car=Car('audi','a4',2020)
my_car.make
my_car.get_descriptive_name()

属性和方法的访问以实例名+.来表示,方法后面需要另外加括号。
除了创建my_car的实例外,还可以创建很多其他名称的实例。

相关文章

网友评论

      本文标题:2021-12-11 Python-14

      本文链接:https://www.haomeiwen.com/subject/rszkfrtx.html