私有字段

class Foo:

    def __init__(self, name):
self.__name = name def f1(self):
print(self.__name) class Bar(Foo):
def f2(self):
print(self.__name) obj = Foo('alex')
#print(obj.name)
#只能内部调用
obj.f1() obj2 = Bar('aaa')
obj2.f1()
#私有普通字段只有自己能访问,其余均不行
obj2.f2()

静态方法

class Foo:

    __cc = '123'
def __init__(self, name):
self.__name = name def f1(self):
print(self.__name) @staticmethod
def f2():
print(Foo.__cc) # obj = Foo('aaa')
# obj.f2()
Foo.f2()

__getitem,__setitem,__delitem

class Foo:

    def __init__(self, name):
self.__name = name def f1(self):
print(self.__name) def __getitem__(self, item):
print(type(item))
return 123 def __setitem__(self, key, value):
print('setitem') def __delitem__(self, key):
print('del item') obj = Foo('alex')
#obj[]执行__getitem__方法
#语法对应关系
ret = obj['ad']
print(ret)
ret1 = obj[1:2]
print(ret1)
obj['k1'] = 123
del obj['k1']

切片

class Foo:

    def __init__(self, name):
self.__name = name def f1(self):
print(self.__name) def __getitem__(self, item):
print(item, type(item))
print(item.start)
print(item.stop)
print(item.step)
return 123 def __setitem__(self, key, value):
#key.start key.stop key.step
print(type(key), type(value)) def __delitem__(self, key):
print(type(key))
# key.start key.stop key.step
print('del item') obj = Foo('alex')
#obj[]执行__getitem__方法
#语法对应关系
#ret = obj['ad']
ret1 = obj[1:4:2]
obj[1:4] = [11, 22, 33, 44, 55]
del obj[1:4]

迭代器

class Foo:
def __iter__(self):
yield 1
yield 2 obj = Foo()
for item in obj:
print(item) #1.obj能被循环,必须被迭代
#2.for循环执行时,默认执行__iter__方法

isinstance和issubclass

#isinstance:obj, Foo(obj类型和obj类型的父类)的实例
#issubclass:是否子类
class Foo:
pass class Bar(Foo):
pass obj = Bar()
ret = isinstance(obj, Foo)
print(ret) ret2 = issubclass(Bar, Foo)
print(ret2)

super

#假设有一大堆代码,现在需要增加功能,不改变原来代码结构的基础上,增加类
#然后执行super方法,super主动去执行父类的方法
class C1:
def f1(self):
print('c1.f1') class C2(C1):
def f1(self):
#主动去执行父类的f1方法
super(C2, self).f1()
print('c2.f1')
#不建议使用该方法
#C1.f1(self) obj = C2()
obj.f1()

在不改变原有框架的基础上,增加方法

框架结构:
Test
    backend
           commons.py
    index.py
    lib.py(自己扩展类)
    settings.py
commons.py
class Foo:

    def f1(self):
print('Foo.f1')
settings.py
# Path = 'backend.commons'
# ClassName = 'Foo' Path = 'lib'
ClassName = 'MyFoo'
lib.py
from backend.commons import Foo

class MyFoo(Foo):
def f2(self):
print("before")
super(MyFoo, self).f1()
print("after")
index.py
from settings import ClassName
from settings import Path def execute():
#print(ClassName)
#反射获取字符串
model = __import__(Path, fromlist=True)
cls = getattr(model, ClassName)
obj = cls()
obj.f2() if __name__ == '__main__':
execute()
有序字典
class MyDict(dict):

    def __init__(self):
self.li = []
super(MyDict, self).__init__() def __setitem__(self, key, value):
self.li.append(key)
super(MyDict, self).__setitem__(key, value) def __str__(self):
tmp_list = []
for key in self.li:
value = self.get(key)
tmp_list.append("'%s':%s" % (key, value))
tmp_str = "{" + ",".join(tmp_list) + "}"
return tmp_str obj = MyDict()
obj['k1'] = 123
obj['k2'] = 345
print(obj)

单例模式

class Foo:
instance = None def __init__(self, name):
self.name = name @classmethod
def get_instance(cls):
if cls.instance:
return cls.instance
else:
obj = cls('alex')
cls.instance = obj
return obj obj = Foo.get_instance()
obj1 = Foo.get_instance()
print(obj)
print(obj1)

异常处理

while True:
num1 = input('num1:')
num2 = input('num2:')
try:
num1 = int(num1)
num2 = int(num2)
result = num1 + num2 #具体捕获异常种类
except KeyError as ex:
print(ex)
except ValueError as ex:
print(ex)
except IndentationError as ex:
print(ex)
#Exception:捕获所有的异常,但不能分辨是哪一种异常
except Exception as ex:
print(ex) #print执行时调用类中的str方法

常用异常

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

更多异常

ArithmeticError

AssertionError

AttributeError

BaseException

BufferError

BytesWarning

DeprecationWarning

EnvironmentError

EOFError

Exception

FloatingPointError

FutureWarning

GeneratorExit

ImportError

ImportWarning

IndentationError

IndexError

IOError

KeyboardInterrupt

KeyError

LookupError

MemoryError

NameError

NotImplementedError

OSError

OverflowError

PendingDeprecationWarning

ReferenceError

RuntimeError

RuntimeWarning

StandardError

StopIteration

SyntaxError

SyntaxWarning

SystemError

SystemExit

TabError

TypeError

UnboundLocalError

UnicodeDecodeError

UnicodeEncodeError

UnicodeError

UnicodeTranslateError

UnicodeWarning

UserWarning

ValueError

Warning

ZeroDivisionError

完整错误处理代码块

try:
pass
#有错误执行except
except KeyError as ex:
print(ex)
except ValueError as ex:
print(ex)
except IndentationError as ex:
print(ex)
# Exception:捕获所有的异常,但不能分辨是哪一种异常
except Exception as ex:
print(ex) # print执行时调用类中的str方法
#如果没有报错执行else
else:
pass
#不管是否报错都执行finally
finally:
pass

主动触发异常

try:
#raise Exception('主动错误一下') #self.message = '主动错误一下'
raise ValueError('主动错误一下') # self.message = '主动错误一下'
print(1234)
#有错误执行except
except KeyError as ex:
print(ex)
except ValueError as ex:
print(ex)
except IndentationError as ex:
print(ex)
# Exception:捕获所有的异常,但不能分辨是哪一种异常
except Exception as ex:
print(ex) # print执行时调用类中的str方法,return self.message
#如果没有报错执行else
else:
pass
#不管是否报错都执行finally
finally:
pass

自定义异常

class WangHuafengException(Exception):
def __init__(self, msg):
self.message = msg def __str__(self):
return self.message try:
raise WangHuafengException('我的异常处理')
except WangHuafengException as e:
print(e)

断言

assert 1==2    #设置条件,是否满足,如不满足报错

最新文章

  1. 快速开发框架CRL3.0发布,附带最新的项目示例CRLShoppingDemo
  2. [SQL] SQL 查出一张表中重复的所有记录
  3. python进阶笔记 thread 和 threading模块学习
  4. 一个Angular模块中可以声明哪些组件?
  5. List排序和去重
  6. BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!
  7. 是智能手机推动windows xp系统停止服务吗
  8. 九度 OJ1008 hdu 3790
  9. 硬盘工具diskpart
  10. [selenium webdriver Java]处理弹出窗口
  11. input[type='file']样式美化及实现图片预览
  12. 将luarocks整合进openresty
  13. openj9
  14. 【Luogu3731】[HAOI2017]新型城市化(网络流,Tarjan)
  15. ReactNative用指定的真机/模拟器运行项目
  16. X分钟速成Python3
  17. TF-IDF的解释
  18. Base64 转 图片
  19. svn 怎么直接同步指定服务器的某个文件夹
  20. python内置函数详细介绍

热门文章

  1. java对文件拷贝的简单操作
  2. 用户浏览器关闭cookie处理方法
  3. Sencha Touch 的基础知识
  4. MySQL 5.6初始配置调整
  5. android 51 有序广播
  6. ZFS+Dtrace+Zones+KVM=SMARTOS + dtrace 详细文档
  7. linux下mysql配置文件my.cnf详解
  8. Qt 学习之路 :坐标系统
  9. React Links
  10. 源码解析之–网络层YTKNetwork