zoukankan      html  css  js  c++  java
  • python面向对象<三>

    类属性、实例属性

    class Tool(object):
        #属性(类属性)类对象(Tool)
        num = 0
        #方法
        def __init__(self,new_name):
            self.name = new_name               #实例属性
            Tool.num += 1                      #(类属性的引用方法)
    
    tool1 = Tool('铁锹')
    tool2 = Tool('工兵铲')
    tool3 = Tool('水桶')

    实例属性:

    和具体的某个实例对象有关系
    并且一个实例对象和另一个实例对象是不共享属性的

    类属性:

    类属性所属于类对象
    并且多个实例对象之间共享同一个类属性

    类方法、实例方法、静态方法:

    class Game(object):
    
        #类属性
        num = 1
    
        #实例方法:必须要有一个参数,参数用来接触对象(self)
        def __init__(self):
            #实例属性
            self.name = 'laowang'
    
        #类方法:必须要有一个参数 ,参数进行类的引用
        @classmethod
        def add_num(cls):        #cls:保存类的引用(修改类属性)
            cls.num = 100
    
        # 静态方法:可以没有任何参数
        @staticmethod
        def  print_menu():
            print('---------------')
            print('穿越火线')
            print('1、开始游戏')
            print('2、结束游戏')
            print('---------------')
    
    #调用类方法
    game = Game()
    # Game.add_num()        #1、调用类方法#可以通过类的名字调用类方法
    game = Game()           #2、还可以通过这个类创建出来的对象去调用这个类方法
    print(Game.num)
    
    #调用静态方法
    #Game.print_menu()      #1、通过类调用静态方法
    game.print_menu()       #2、通过实例对象去调用静态方法

    __new__方法:

    class Dog(object):
        def __init__(self):
            print('-------init方法------')
        def __del__(self):
            print('-------del方法------')
        def __str__(self):
            print('-------str方法------')
        def __new__(cls):                         # cls时Dog指向的那个对象
            # print(id(cls))
            print('-------NEW方法------')
            return object.__new__(cls)            # 重新调用object类的new方法
    
    # print(id(Dog))
    xtq = Dog()  

    相当于要做3件事
    1、调用__new__方法只来创建对象,然后找一个变量来接受__new__的返回值,这个返回值表示创建出来的对象的引用
    2、__init__(刚刚创建出来的对象的应用),__init__只负责初始化
    3、返回对象的引用

    总结:
      · _new__至少要有一个参数cls,代表要实例化的类。
      · __new__必须要有返回值,返回实例化出来的实例。
      · __init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

    单例:

    1. 单例是什么
      举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。
      确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

    单例:不管创建多少此,都是一个对象。eg:window

    class Dog(object):
        __instance = None                      #为了不影响外边,设置成私有属性
        def __new__(cls):
            if cls.__instance == None:
                cls.__instance = object.__new__(cls)
                return cls.__instance
            else:
                #return上一次创建对象的引用
                return cls.__instance
    a = Dog()
    print(id(a))
    b = Dog()
    print(id(b))
    # >>> 1736945052248
    # >>> 1736945052248

    单例一次

    class Dog(object):
        __instance = None      #为了不影响外边,设置成私有属性
        def __new__(cls,name):
            if cls.__instance == None:
                cls.__instance = object.__new__(cls)
                return cls.__instance
            else:
                #return上一次创建对象的引用
                return cls.__instance
        def __init__(self,name):
            self.name = name
    
    a = Dog('旺财')
    print(id(a))
    print(a.name)
    
    b = Dog('哮天犬')
    print(id(b))
    print(b.name)
    # >>> 2605269461816
    # >>> 旺财
    # >>> 2605269461816
    # >>> 哮天犬  

    只初始化一次:

    #单例:不管创建多少此,都是一个对象。eg:window
    class Dog(object):
        __instance = None      #为了不影响外边,设置成私有属性
        __init_flag = False
        def __new__(cls,name):
            if cls.__instance == None:
                cls.__instance = object.__new__(cls)
                return cls.__instance
            else:
                #return上一次创建对象的引用
                return cls.__instance
        def __init__(self,name):
            if Dog.__init_flag  == False:
                self.name = name
                Dog.__init_flag = True
    
    a = Dog('旺财')
    print(id(a))
    print(a.name)
    
    b = Dog('哮天犬')
    print(id(b))
    print(b.name)
    # >>> 2605269461816
    # >>> 旺财
    # >>> 2605269461816
    # >>> 旺财
  • 相关阅读:
    sql 大数据量 的分表操作
    NHibernate 2.0 配置
    NHibernate 之调用存储过程
    k-v-o 扫盲
    320学习笔记 2
    GCD之dispatch queue
    使用KVO体会
    timer,runloop,thread,task小总结
    Run Loop
    iPh oto的删除动画
  • 原文地址:https://www.cnblogs.com/twoo/p/11750519.html
Copyright © 2011-2022 走看看