python的基础视频看完了,现在学习一下python的OOP编程

  1. 类的定义:calss name :
  2. 类的调用:name()
  3. 类属性的调用:
  4. 类方法的调用
  5. 调用方法时可以把对象传递过去
  6. 设置属性或者获取属性时尽量用方法获取或者设置(更安全)

__init()__方法

  1. 作用:初始化对象

__str()__方法

  1. 作用:直接打印对象时,返回对象的描述信息,所以定义该方法时必须加:return

私有方法

  1. 直接在方法前面加__
  2. 私有方法只能在类里面调用

__del()__方法

  1. 对象销毁时,并且所有引用都结束时,调用
  2. 或者在程序结束时调用

sys模块

  1. sys.getrefcount()测量对象引用的个数,得到的结果比实际结果多1

类的继承

  1. 使用:在派生类定义的时候,在后面加一个括号,写上基类的名字
  2. 方法重写
  3. 方法重写时,可以调用基类的方法,格式:基类.方法(self)或者使用super,格式:super().基类方法()
  4. 类继承以后私有方法(属性)不被继承
  5. __init()__方法会被继承
  6. 多继承:子类拥有多个父类,使用:直接在括号里面写上多个父类
  7. \类.__mro__查看类调用方法的顺序(c3算法)

多态

  1. 概念: 等到真正调用的时候才真正确定调用的对象是谁
  2. python多态表现不明显,c或者c++体现明显
  3. 充分体现了动态型语言的特点

类属性跟实例属性

  1. 类属性定义:在类里面定义的属性
  2. python中,一切皆对象,类称为类对象,new出来的类称为实例对象
  3. 实例对象里面的属性称为实例属性
  4. 类对象里面的属性称为类属性
  5. 类对象(属性)只有一个
  6. 类对象(属性)如果发生变化,实例对象(属性)也随之变化
  7. 实例对象(属性)互不关联
  8. 获取类属性,类属性=类名.属性

实例方法,类方法,静态方法

  1. 类方法定义:在方法前面添加:@classmethod ,self改成cls
  2. 可以通过类的名字调用类方法,还可以通过这个类创建出来的对象调用这个类方法
  3. 静态方法定义:在方法前面添加:@staticmethod ,self可以不写
class Game(object):
    #类属性
    num = 0
    #实例方法
    def __init__(self):
        #实例属性
        self.name = "laowang"

    #类方法
    @classmethod
    def add_num(cls):
        cls.num = 100

    #静态方法
    @staticmethod
    def print_menu():
        print("----------------------")
        print("    穿越火线V11.1")
        print(" 1. 开始游戏")
        print(" 2. 结束游戏")
        print("----------------------")

耦合与解耦

  1. 理解:联系比较强,比如修改一处代码,另一处也要改,那么这两个地方的耦合就比较强

__new__方法

  1. 创建对象的方法
  2. object._new_(cls),实例化对象才能执行init方法
  3. _new_(cls)完成创建
  4. _init_(cls)完成初始化

单例模式

  1. 创建出来的对象始终指向一个内存地址
  2. 示例代码:
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  cls.__instance
        def __init__(self,name):
            # 只实例化一次对象
            if Dog.__init_flag==False:
                self.name=name
                Dog.__init_flag=True
a=Dog("哮天犬")
b=Dog("小白")
print(id(a))
print(a.name)
print(id(b))
print(b.name)

异常

  1. 异常处理:try: except (NameError,xxx)
  2. Exception
  3. else----没有异常执行
  4. finally----最后执行
  5. ctrl+c也是一个异常
  6. 异常的传递
  7. raise抛出自定义异常类
  8. if判断时,空值都是假的,不会执行,例如,“”,{},[],(),None,0

模块

  1. import与from import的区别
  2. as起别名
  3. print(_name_),如果是自己调用,打印main,如果是main模块调用,打印模块名字
  4. if _name_==‘_main_’

循环遇到的坑

  1. 可能会出现漏删
  2. 解决漏删问题,可以找一个列表把要删除的元素保存起来,