09-Python之路-进阶-面向对象-类与方法

2022-04-28  本文已影响0人  程序记录日志

类属性

属性的获取机制

类方法

语法

@classmethod
def 类方法名(cls):
    pass

扩展

静态方法

语法

@staticmethod
def 静态方法名():
    pass

单例

单例设计模式

new方法

作用

实例

  1. 定义一个类属性,初始值是None,用于记录单例对象的引用
  2. 重写new方法
  3. 如果类属性is None,调用父类方法分配空间,并在类属性中记录结果
  4. 返回类属性中记录的对象引用
class Singleton(object):
    # 定义类属性记录单例对象引用
    instance = None
    
    def __new__(cls,*args,**kwargs):
        # 1.判断类属性是否已经被赋值
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        
        # 2.返回类属性的单例引用
        return cls.instance
        
  1. 定义一个类属性init_flag标记是否执行过初始化动作,初始值为False
  2. init方法中,判断init_flag,如果为False就执行初始化动作
  3. 然后将init_flag设置为True
  4. 再次自动调用init方法时,初始化动作就不会再次执行
class Singleton(object):
    # 记录第一个被创建对象的引用
    instance = None
    # 记录是否执行过初始化操作
    init_flag = False
    
    def __new__(cls,*args,**kwargs):
        # 1.判断类属性是否是空对象
        if cls.instance in None:
        # 2.调用父类的方法,为第一个对象分配空间
        cls.instance = super().__new__(cls)
        # 3.返回类属性保存的对象引用
        return cls.instance
        
    def __init__(self):
        if not Singleton.init_flag:
            print("初始化单例")
            
            Singleton.init_flag = True
            
# 创建多个对象
singleton1 = Singleton()
print(singleton1)

singleton2 = Singleton()
print(singleton2)

property属性

定义

注意

方法:foo_obj.func()
property属性:foo_obj.prop

两种方式

类属性访问方式

三种类属性访问方式

参数(property四个参数)

魔法属性

上一篇下一篇

猜你喜欢

热点阅读