py08-python的类和对象

一、类

1、创建步骤

(1)设计类 (class)
解释:可以比作制作一个表格

class Student:
    name = None

(2)创建对象
解释:可以比作打印设计好的表格

stu_1 = Student()
stu_2 = Student()

(3)对象属性赋值
解释:可以比作向表格中填写数据

stu_1.name = "小明"
stu_2.name = "张三"

2、设计类,再创建对象,叫做类的实例化

3、类的组成:

(1)类的属性,称之为:成员变量
(2)类的行为,称之为:成员方法
注意:函数是写在类外的,定义在类内部,称之为方法

4、类和成员方法的定义语法

class 类名称:
    成员变量
    
    def 成员方法(self,参数列表):
        成员方法体
        
        
对象 = 类名称()

5、self的作用

(1)表示类对象本身的意思,只有通过self,成员方法才能访问类的成员变量
(2)self出现在形参列表,但不占用参数位置,可忽略

6、类的理解和解释

(1)现实世界的事物可以理解为由属性和行为组成,类也可以包含属性和行为
(2)类是“设计图纸”,对象是基于图纸生产的具体实体
(3)面向对象编程就是,使用对象进行编程,即,设计类,基于类创建对象,并使用对象来完成具体的工作

二、封装、继承和多态

1、封装:将事物在类中描述为属性和方法,即为封装

(1)私有成员:现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了
(1-1)怎么定义:成员变量和成员方法的命名均以__作为开头即可
(1-2)私有成员的访问限制:类对象无法访问私有成员,类中的其它成员可以访问私有成员
(1-3)意义:在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用),就需要使用私有成员

2、继承:就是一个类,继承另外一个类的成员变量和成员方法

(1)语法:

class(父类[,父类2......,父类N]):
    类内容体

(2)子类构建的类对象,可以有自己的成员变量和成员方法,可以使用父类的成员变量和成员方法
(3)单继承和多继承
单继承:一个类继承另一个类;多继承:一个类继承多个类,按照顺序从左向右依次继承,多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承
(4)复写:对父类的成员属性或成员方法进行重新定义,在子类中重新实现同名成员方法或成员属性即可。只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的
(5)子类中,调用父类成员
–(5-1)方式1
使用成员变量: 父类名.成员变量
使用成员方法: 父类名.成员方法(self)
–(5-2)方式2
使用super()调用父类成员
使用成员变量: super().成员变量
使用成员方法: super().成员方法()

3、多态

(1)多态:指的是,同一个行为,使用不同的对象获得不同的状态。如,定义函数(方法),通过类型注解声明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态
(2)抽象类(接口):包含抽象方法的类,称之为抽象类。
抽象方法是指:没有具体实现的方法(pass)称之为抽象方法。多用于做顶层设计(设计标准),以便子类做具体实现。也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法,并配合多态使用,获得不同的工作状态

三、设计模式:

1、释义:设计模式是一种编程套路,使用特定的套路得到特定的效果,可以极大的方便程序的开发。最常见、最经典的设计模式,就是我们学习的面向对象了。除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模式
2、分类:常用到的有单例、工厂模式。另外还有建造者、责任链、状态、备忘录、解释器、访问者、观察者、中介、模板、代理模式等等
3、单例模式:单例模式就是对一个类,只获取其唯一的类实例对象,持续复用它,节省内存,节省创建对象的开销
(1)举例子

class Tool:
    pass
    
t1 = Tool()
t2 = Tool()
print(t1)
print(t2)

# -->输出:
# <__main__.Tool object at 0x01BDAF88>
# <__main__.Tool object at 0x01BDAFB8>

创建类的实例后,就可以得到一个完整的、独立的类对象,通过print语句可以看出,它们的内存地址是不相同的,即t1和t2是完全独立的两个对象
某些场景下,我们需要一个类无论获取多少次类对象,都仅仅提供一个具体的实例,用以节省创建类对象的开销和内存开销,比如某些工具类,仅需要1个实例,即可在各处使用,这就是单例模式所要实现的效果

(2)定义
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场
保证一个类只有一个实例,并提供一个访问它的全局访问点
适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时

(3)单例的实现模式

# 1.在一个文件中定义代码,文件名:test.py
class StrTools:
    pass
    
str_tool = StrTools()

# 2.在另一个文件中导入
from test import str_tool
s1 = str_tool
s2 = str_tool
print(s1)
print(s2)

# -->输出:
# <test.StrTools object at 0x016601F0>
# <test.StrTools object at 0x016601F0>

# 总结:由此可以看出,s1和s2是同一个对象

4、工厂模式:当需要大量创建一个类的实例的时候,可以使用工厂模式。即,从原生的使用类的构造去创建对象的形式,迁移到,基于工厂提供的方法去创建对象的形式
(1)原生的使用类的构造去创建对象的形式:

class Person:
    pass
    
class Worker(Person):
    pass
    
class Student(Person):
    pass
    
class Teacher(Person):
    pass
    
worker = Worker()
stu = Student()
teacher = Teacher()

(2)基于工厂提供的方法去创建对象的形式:

class Person:
    pass
    
class Worker(Person):
    pass
    
class Student(Person):
    pass
    
class Teacher(Person):
    pass

class Factory:
    def get_person(self,p_type):
        if p_type='w':
            return Worker()
        elif p_type='s':
            return Student()
        else:
            return Teacher()

factory = Factory()
worker = factory.get_person('w')
stu = factory.get_person('s')
teacher = factory.get_person('t')

# 总结:使用工厂类的getperson()方法去创建具体的类对象。大批量创建对象的时候有统一的入口,易于代码维护。当发生修改,仅修改工厂类的创建方法即可。符合现实世界的模式,即由工厂来制作产品(对象)
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值