Python基础第十四节—面向对象(下)+模块

一、多态

多态是面向对象的三大特性之一,在Python中,当你调用实例化对象时,不论他是什么类型,只要存在这个方法,参数也正确,那他就可以调用。
Python崇尚的是鸭子类型,只要他看起来像鸭子,走起路来像鸭子,那他就是鸭子。
多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强,多态是调用方法的技巧,不会影响到类的内部设计。

二、属性和方法

属性

  • 类属性,直接在类中定义的属性是类属性
  • 类属性可以通过类或类的实例访问到。但是类属性只能通过类对象来修改,无法通过实例对象修改
  • 实例属性 通过实例对象添加的属性属于实例属性
  • 实例属性只能通过实例对象来访问和修改,类对象无法访问修改

方法

  • 在类中定义,以self为第一个参数的方法都是实例方法
  • 实例方法在调用时,Python会将调用对象以self传入
  • 实例方法可以通过类实例和类去调用
  • 当通过实例调用时,会自动将当前调用对象作为self传入
  • 当通过类调用时,不会自动传递self,我们必须手动传递self

类方法

  • 在类的内容以@classmethod 来修饰的方法属性类方法
  • 类方法第一个参数是cls 也会自动被传递。cls就是当前的类对象
  • 类方法和实例方法的区别,实例方法的第一个参数是self,类方法的第一个参数是cls
  • 类方法可以通过类去调用,也可以通过实例调用

静态方法

  • 在类中用@staticmethod来修饰的方法属于静态方法
  • 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例调用
  • 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
  • 静态方法一般都是些工具方法,和当前类无关
class province():
    country = "中国"     #类属性也叫静态字段

    def __init__(self,name):
        self.name = name      #实例属性

    def print_info(self):     #实例方法
        print(province.country,self.name)

    @classmethod
    def em(cla):               #可以在创建对象之前调用,不依赖对象,cla表示类本身
        print("类方法")


def am():                 #可以在创建对象之前调用,不依赖对象
    print("静态方法")


hunan = province("湖南")    #创建实例对象
hunan.print_info()

province.em()
am()

三、单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。
当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。
如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,
这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。
事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。

""" 
单例模式的实现思路:
    1.当对象不存在时,创建对象
    2. 当对象存在时,永远返回当前已经创建对象
"""
class single(object):
    __isinstance = None

    def __new__(cls, *args, **kwargs):
        if cls.__isinstance is None:
            cls.__isinstance = super().__new__(cls)
            return cls.__isinstance
        else:
            return cls.__isinstance


a = single()
b = single()
print(id(a))
print(id(b))

四、模块

模块化指将一个完整的程序分解成一个个的小模块
通过将模块组合,来搭建出一个完整的程序
模块化的特点

  • 方便开发
  • 方便维护
  • 模块可以复用

五、模块的创建

  • 在Python当中一个py文件就是一个模块
  • 在一个模块中引入外部模块 import 模块名(模块名就是py文件)
  • 可以引入同一个模块多次,但是模块的实例只会创建一次 import 模块名 as 模块别名
  • 在一个模块内部都有一个__name__。通过它我们可以获取模块的名字
  • 如果py文件直接运行时,那么__name__默认等于字符串’main’。__name__属性值为__main__的模块是主模块。一个程序中只有一个主模块

六、模块的使用

  • 访问模块中的变量 语法是 模块名.变量名
  • 访问模块中的函数 语法是 模块名.函数名
  • 访问模块中的对象 语法是 模块名.对象名
  • 我们也可以引入模块中部分内容 语法 from 模块名 import 变量,变量…
  • 还有一种引入方式 语法 from 模块名 import 变量 as 别名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值