Python---面向对象

类的设计:

在程序开发中,要设计一个类,通常需要满足以下三要求

1.类名 这类事物的名字,满足大驼峰命名法

2.属性 这类事物具有什么样的特征

3.方法 这类事物具有什么样的行为

 

面向对象的基础语法:

定义简单的类:

class 类名:

    def 方法1(self,参数列表):

        pass

    def 方法2 (self,参数列表):

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

对象变量 = 类名()

实例:

需求

    小猫爱吃鱼,小猫要喝水

 

一.面向对象三大方法

1.初始化方法

我们现在已经知道了使用类名()

当使用类名()创建对象时,python的解释其会自动执行以下操作:

    1.为对性在内存中分配空间--创建对象

    2.调用初始化方法为对象的属性设置初始值--初始化方法

    __init__ 方法是专门用来定义一个类具有哪些属性的方法

实例:

2.__del__方法

在python中

当使用类名()创建对象时,为对象分配空间后,自动调用__init__

当一个对象被从内存中销毁前,会自动调用__del__方法

实例:

3.__str__方法

在python中,使用pytjon输出对象变量,

在默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中

的地址(十六进制表示)

如果在开发中,希望使用print输出对象变量时,

能够打印自定义的额内容,就可以利用__str__这个内置方法了4

 

二.面向对象三大特征:

1.封装:根据职责将属性和方法封装到一个抽象的类中

2.继承: 实现代码的重用,相同的代码不需要重复的写

3.多态: 不同的对象调用相同的方法,产生不同的结果,

增加代码的灵活度

1.封装

1.封装是面向对象变成的一大特点

2. 面向对象变成的第一部 将属性和方法封装到一个抽象的类中

3. 外界使用类创建对象,然后让对象调用方法

4.对象方法的细节都被封装在类的内部

实例一:

实例二:

1.房子有户型,总面积和家具名称列表

    新房子没有任何的家具

2.家具有名字和占地面积,其中

床:占地4平米

衣柜: 占地2平米

参作: 占地3平米

3.将以上三间家具添加到房中

4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

2.继承:

实例一:

1.继承的传递性:

1,B类传承与A类,C类传承与B类

2,那么C类就具有B 类和A类所有的属性和方法

子类拥有父类以及父类的父类所有封装的属性和方法

实例二:

2.覆盖父类的方法

如果在开发中,父类的方法的实现和子类方法的实现,完全不同,就可以使用覆盖的方法

在子类中重新编写父类的方法

具体实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现

重写之后,在运行时,只会调用子类的重写方法。而不会再调用父类封装的方法

 

3.多继承

多继承

子类拥有一个父类叫做单继承

子类可以拥有多个父类,并且具有多个父类的属性和方法

例如:孩子会继承自己父亲母亲的特性

语法:

class 子类名(父类名,父类名2...)

    pass

3.多态

 

三.私有属性和私有方法

应用成精及定义方式

应用场景

    在实际开发中,对象的属性或方法可能只希望自己能看

    私有属性就是对象不希望公开的属性

    私有方法就是对象不希望公开的方法

定义方法

    在定义属性或方法时,在属性名或者方法前增加“__”

实例一:

实例二之父类私有方法属性1:

1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法

2.子类对象可以通过父类的共有方法简介访问到私有属性或私有方法

私有属性,私有方法是对象的隐私,不对外公开,外界以及子类都不能直接访问

私有属性,私有方法常做一些内部的事情

四.类的结构

实例:

1.使用面向对象开发,第一部是设计类

2.使用雷鸣()创建对象,创建对象的动作有两步

1.在内存中对象分配空间

2.调用初始化方法__init__为对象初始化

3.对象创建后,内存中就有一个对象的实实在在的存在--实例

 

因此:

1.创建出来的对象叫做类的实例

2.创建对象的动作叫做实例化

3.对象的属性叫做实例属性

4.对象调用的方法叫做实例方法

 

在程序执行时:

1.对象各自拥有自己的实例属性

2.调用对象的方法,可以通过self

父嗯文自己的属性

调用自己的方法

结论:

1.每一个对象都有自己独立的内存空间,保存各自不同的额属性

2。多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部

1.类结构:

是一个特殊的对象

python中一切皆对象

    class AAA: 定义的类属性属于类对象

    obj1 = AAA: 属于实例对象

在运行程序时,类同样会被加载到内存

在python中,类是一个特殊的对象--类对象

除了封装 实例(对象)的属性和方法外,类对象还可以有自己的属性和方法

 

通过类名. 的方式可以直接访问类的属性或者调用类的方法

2.类属性

类属性就是针对类对象定义的属性

    使用赋值语句在class关键字下方可以定义类属性

    类属性用于记录于这个类相关的特征

类方法就是针对类对象定义的额方法

    在类方法内部就可以直接访问类属性或者调用其他方法

 

语法如下

@classmethod

def 类方法(cls):

    pass

 

 

静态方法

在开发时,如果需要在类中封装一个方法,这个方法:

    既不需要访问实例属性或者调用实例方法

    也不需要访问类属性或者调用类方法

这个时候可以把这个方法封装成一个静态方法

他语法如下:

@staticmethod

def 静态方法():

    pass

静态方法需要修饰器@staticmethod来标识,告诉解释器这是一个静态方法

通过类名,调用静态方法

 

综合应用:

案例小结:

1.实例方法:方法内部需要访问实例属性

2.类方法:方法内部只需要访问类属性

3.静态方法:方法内部不需要访问实例属性

 

提问:如果方法内部,既需要访问实例属性,有需要访问类属性,应该用什么方法?

答: 应该用定义实例方法

"""

设计模式:

使用类名()创建对象时候,python的解释器首先会调用__new__方法作为对象分配空间

__new__是一个由object基类提供的额内之的静态方法,主要有两个作用:

    在内存中为对象分配空间

        返回对象的引用

 

python的解释器获得额对象的引用后,将引用作为第一个参数,传递给__init__方法

# __new__: 负责给对象分配空间 __init__(初始化方法)负责给对象初始化

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值