python学习系列--day05

一、高级特性OOP

1、使用__slots__(2个下划线)

    (1)在使用对象实例的时候给与对象添加方法或者属性

             class Student(object):

                    pass             

             s = Student

             s.age = 6  #添加age属性

             from type import MethodType

            def setAge(self,age):

                  self.age = age

             s.setAge = MethodType(s,setAge)  #添加setAge方法

            上述的方法仅仅局限与某一个对象实例,若要整个类都有该方法:

             Student.setAge = setAge #原来的class 类源文件仍然没有改变

    (2)限制一个仅有某些属性,利用__slots__

             def Student(object):

                   __slots__ = ('name','age') #使用一个tuple来表示该类所有的属性

2、@property装饰器

     def Student(object):

            @property

            def name(self):

                  return self._name

             @name.setter

             def setName(self,name):

                   self.name = name

      在getter方法加上@property使其变为属性,只可读。在setter方法加上xxx.setter 则该属性可写

       s  = Student()

       s.name = 'Jamson'

3、多继承

      def Animal(object):

          pass

      def Runable(object):

          pass

      def Dog(Animal,Runable):

          pass

      该设计模式被称为Mixln,子类拥有所有父类的所有方法

4、__str__方法类似与java中的toString方法

     def Man(object):

           def __init__(self,name):

                 self.name = name

           def __str__(self):

                 return 'Man (name is %s' % self.name

           __repr__ = __str__#两个方法基本上是一样的

5、枚举enum

     from enum import Enum

     Gender = Enum('Gender',('man','woman'))

      Gender.man

      或者定义个枚举类

      from enum import Enum,unique

      @unique #检查枚举值是否唯一

      class Gender(Enum):

                man = 0

                woman = 1

6、元类metaclass

     先定义元类,再定义类,在创建实例

    class ListMetaclass(type):

           def __new__(cls,name,bases,attrs):

                 attrs['add'] = lambda self,value: self.append(value)

                 return type.__new__(cls,name,bases,attrs)

     class MyList(list,metaclass = ListMetaclass):#使得list有add方法

             pass

     __new__()接收到的参数:

     (1)当前准备创建类的对象cls

     (2)类的名字name

     (3)类继承的父类集合bases

     (4)类的方法的集合 attrs

二、异常处理

 1、基本结构

       try.....except......finally....

       try:

           print('try...')

          r = 10 / 0

           print(r)

       except ZeroDivisionError as e:

            print(e)

       finally:

           print('finally')

       print('END')

2、记录错误

      在except的处理中

        except ValueError as e:

                logging.exception(e)

3、抛出异常raise

4、单步调试

     python3 -m pdb err.py

     进入单步调试模式后

     输入 l 表示查看源码

     输入 n 表示执行下一条语句

     输入  p 变量名 查看变量的值

     输入 q 结束单步调试

5、pdb.set_trace()

      在模块中,引入import pdb, 在代码中嵌入pdb.set_trace(),运行时,每遇到一个pdb.set_trace()就会暂停运行

除了可用单步调试的命令外,还可以用c表示继续运行

6、logging()

     import logging

     logging.basicConfig(level = logging.INFO)#指定记录信息的级别 

     logging.info('Error %s' % name)#输出一段文本

      此外的信息级别还有debug,info,warning,error

                                 

                                                                                                                                                         next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值