Python中面向对象的基本理论(一)

基本理论:

什么是对象:

万物皆对象

对象是具体物体:

        拥有属性

        拥有行为

        把很多零散的东西,封装成一个整体

    举例:小王:

            属性:身高、体重……

            行为:走路、吃饭、放羊……

 

Python中的体现:

    Python是一门特别彻底的面向对象编程(OOP)的语言

    

面向过程&面向对象

    两者都是一种解决问题的思路

    面向过程:在解决问题的过程中,关注的是解决问题的每一个过程(步骤)

    面向对象:在解决问题的过程中,关注的是解决问题的对象

    举个例子:

        做好饭之后洗碗

        

    对比:

    面向对象本身是面向过程的封装

    面向过程编程最重要的是什么?    分解步骤的能力

    面向对象编程最重要的是什么?    把哪些功能划分到哪个对象

    如何从面向过程编程的思想,转变到面向对象的编程思想

 

什么是类:

    某一个具体对象特征的抽象

    举例:

类的作用:

    根据抽象的类,产生具体的对象

    例如:

    

 

面向对象在Python中的实践

类的组成:

名称、属性、方法。

属性是静态的,方法是动态的

一定要注意:以上属性和方法,都是抽象的概念

            在产生对象之后,对象才拥有具体的属性值,和方法实现。

对象和类的关系:

    对象 抽象 类 实例化 对象

 

如何定义一个类:

    #新式类

#经典类

#定义一个经典类,类的定义也会占用内存

class Money:

pass

print(Money)

#根据这个类,实例化一个对象

one = Money()

print(one)

 

类的属性相关

    属性和变量的区别和判断依据?

    区别:

        概念:

变量是"可以改变的全值"

        属性是"居于某个对象的特性"

        访问权限:

        变量:根据不同的位置,存在不同的访问权限(全局变量、局部变量)

        属性:只能通过对象来进行访问。(必须先找到对象,对象也是通过变量名来引用;而既然是变量,也有对应的访问权限)

    判断依据:

        是否存在宿主

 

    对象属性

        怎样让一个对象拥有一些属性?(增)

  1. 直接通过对象,动态添加 (语法:对象.属性 = 值)
  2. 通过类的初始化方法(构造方法) _init_方法

print(one.__dict__) 打印这个对象的所有属性

怎样访问一个对象的属性? (查)

    

删除: del one (删除一整个对象) del one.age (删除这个属性)

    类属性

        万物皆对象,类也是一个对象

        给类增加、修改属性

1、Money.num = 18
2、class Money:

    age = 1

    num = 18

    注意:不能通过类实例化的对象增加或者修改类的属性

    限制类中实例化对象属性的添加:

        在类的定义中,添加 __slots__ = ["age"]

 

类的方法相关

    方法的概念

        描述一个目标的行为动作

        和函数非常类似:

            都封装了一系列的行为动作

            被调用之后,都可以执行一系列的行为动作

            最主要的区别就是:调用方式

    方法的划分

        实例方法:默认第一个参数需要接收到一个实例

        类方法:默认第一个参数需要接收到一个类        

        静态方法:静静的看着前面俩装逼,一个参数啥也不默认接收

注意:

  1. 划分的依据是:法的第一个参数必须要接收的教据类型
  2. 不管是哪一种类型的方法,都是存储在类当中;没有在实例当中的
  3. 不同类型方法的调用方式不同。

        三种不同的方法,都是存储在类里面,而不是实例化的对象里面。不管是自己传递,还是解释器帮我们处理;最终要保证不同类型的方法第一个参数接收到的数据,是他们想要的类型

    使用:

  1. 语法
  2. 不同类的方法的规则
  3. 不同类型方法的调用

根据不同的问题,自己决定,到底该设计怎样的方法来解决问题

    实例方法:默认第一个参数需要接收到一个实例

        一般在实例方法,至少得有一个参数,而且一般情况下我们的一个形参名称写的是self,(其实形参名称可以是任意值)写self表示往后这里会接受一个实例本身。

        class Person:

def eat(self,food):

print("在吃饭,", self , food)

p=Person(

p.eat("土豆")

        标准调用:使用实例调用实例方法·不用手动传,解释器会自动把调用对象本身传递过去

注意·如果实例方法没有接收任何参数,则会报错

        其他调用:使用类调用

                间接调用

                本质就是直接找到函数本身来调用

    类方法:默认第一个参数需要接收到一个类

需要用装饰器定义

class Person:

    @classmethod

    Def leifangfa(cls, a):

        Print("这是一个类方法", cls , a )

Person.leifangfa(123)

 

p = Person()

p,leifangfa(666)

(装饰器的作用:在保证原本函数不改变的前提下.直接给这个函数增加一些功能)

    静态方法:静静的看着前面俩装逼,一个参数啥也不默认接收

需要用装饰器定义

class Person :

@staticmethod

def jingtai():

print("这是一个静态方法")

posted @ 2021-04-20 13:26  小艾shea  阅读(83)  评论(0编辑  收藏  举报
Live2D