十一、面向对象进阶

学习目标

  • 说出类方法和实例方法的区别和使用场景
  • 能够实现单例设计模式
  • 继承的基本使用以及注意事项
  • 对象相关内置函数的使用
  • 能够说出什么是多态

一、类方法和静态方法

https://zhuanlan.zhihu.com/p/93178202 ---- 基础入门必看篇:Python静态方法个类方法实例分析

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def eat(self, food):
        print(self.name + "在吃"+food)
    
    # 如果一个方法里没有用到是对象的任何属性,可以将这个方法定义成static
    @staticmethod
    def demo():
        print('hello')

    @classmethod
    def test(cls): # 如果这个函数只用到了类属性,我们可以定义一个类方法
        # 类方法会有一个参数cls,也不需要手动的传参,会自动传参
        # cls指的是类对象 (Person)
        print('yes')

p = Person('张三', 18)

# eat() 是对象方法,可以直接使用 实例对象.方法(参数) 调用,不需要传递self。会自动将对象传递给self
p.eat('红烧牛肉面') # 直接使用实例对象调用方法

# 对象方法还可以使用类对象来调用 类名.方法名()
# 这种方式,不会自动给 self 传参,需要手动的指定 self
Person.eat(p1,'红烧牛肉面')

# 静态方法调用:没有用到实例对象的任何属性
# 1. 类调用
Person.demo()
# 2. 实例调用
p1.demo()

# 类方法:可以使用实例对象和类对象调用,均不需要传cls,会自动将对象所属的类对象传递给cls
p1.demo()
Person.demo()

  • 静态方法、类方法、实例方法(对于所有的方法而言,在内存空间中均属于类,所以 在内存中也只保存一份。方法调用者不同、调用方法时自动传入的参数不同)
    在这里插入图片描述

在这里插入图片描述

二、单例模式

class Singleton(object):
    __instance = None # 保证全局唯一
    __is_first = True # 设置仅能初始化参数一次

    @staticmethod
    def __new__(cls, *args, **kwargs):
        # 申请内存,创建一个对象,并把对象的类型设置为cls
        if cls.__instance is None
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, a, b):
        if self.__is_first:
            self.a = a
            self.b = b
            self.__is_first = False # 动态设置实例属性

# 调用 __new__ 方法申请内存
# 如果不重写 __new__ 方法,会调用 object 的 __new__ 方法
# object 的 __new__ 方法会申请内存
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ModelBulider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值