1 2 3 4 5 6 | class Foo(object): pass obj = Foo() isinstance(obj, Foo) |
1 2 3 4 5 6 7 | class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo) |
1 2 3 4 | try: pass except Exception,ex: pass |
1 2 3 4 5 6 7 | # 未捕获到异常,程序直接报错 s1 = 'hello' try: int(s1) except IndexError,e: print e |
1 2 3 4 5 6 7 8 9 | s1 = 'hello' try: int(s1) except IndexError,e: print e except KeyError,e: print e except ValueError,e: print e |
1 2 3 4 5 | s1 = 'hello' try: int(s1) except Exception,e: print e |
1 2 3 4 5 6 7 8 9 | s1 = 'hello' try: int(s1) except KeyError,e: print '键错误' except IndexError,e: print '索引错误' except Exception, e: print '错误' |
1 2 3 4 5 6 7 8 9 10 11 12 | try: # 主代码块 pass except KeyError,e: # 异常时,执行该块 pass else: # 主代码块执行完,执行该块 pass finally: # 无论异常与否,最终执行该块 pass |
1 2 3 4 | try: raise Exception('错误了。。。') except Exception,e: print e |
1 2 3 4 5 6 7 8 9 10 11 12 | class WupeiqiException(Exception): def __init__(self, msg): self.message = msg def __str__(self): return self.message try: raise WupeiqiException('我的异常') except WupeiqiException,e: print e |
1 2 3 4 5 | # assert 条件 assert 1 == 1 assert 1 == 2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class Foo(object): def __init__(self): self.name = 'wupeiqi' def func(self): return 'func' obj = Foo() # #### 检查是否含有成员 #### hasattr(obj, 'name') hasattr(obj, 'func') # #### 获取成员 #### getattr(obj, 'name') getattr(obj, 'func') # #### 设置成员 #### setattr(obj, 'age', 18) setattr(obj, 'show', lambda num: num + 1) # #### 删除成员 #### delattr(obj, 'name') delattr(obj, 'func') |
详细解析:当我们要访问一个对象的成员时,应该是这样操作:[size=1em]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Foo(object):
def __init__(self):
self.name = 'alex'
def func(self):
return 'func'
obj = Foo()
# 访问字段
obj.name
# 执行方法
obj.func()
那么问题来了?
a、上述访问对象成员的 name 和 func 是什么?
答:是变量名
b、obj.xxx 是什么意思?
答:obj.xxx 表示去obj中或类中寻找变量名 xxx,并获取对应内存地址中的内容。
c、需求:请使用其他方式获取obj对象中的name变量指向内存中的值 “alex”
View Code
答:有两种方式,如下:方式一
方式二
d、比较三种访问方式
- obj.name
- obj.__dict__['name']
- getattr(obj, 'name')
答:第一种和其他种比,...Web框架实例
第二种和第三种比,...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Foo(object): staticField = "old boy" def __init__(self): self.name = 'wupeiqi' def func(self): return 'func' @staticmethod def bar(): return 'bar' print getattr(Foo, 'staticField') print getattr(Foo, 'func') print getattr(Foo, 'bar') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/env python # -*- coding:utf-8 -*- """ 程序目录: home.py index.py 当前文件: index.py """ import home as obj #obj.dev() func = getattr(obj, 'dev') func() |
学习单例之前,首先来回顾下面向对象的内容:python的面向对象由两个非常重要的两个“东西”组成:类、实例面向对象场景一:如:创建三个游戏人物,分别是:View Code
- 苍井井,女,18,初始战斗力1000
- 东尼木木,男,20,初始战斗力1800
- 波多多,女,19,初始战斗力2500
面向对象场景二:如:创建对数据库操作的公共类View Code
- 增
- 删
- 改
- 查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # ########### 单例类定义 ########### class Foo(object): __instance = None @staticmethod def singleton(): if Foo.__instance: return Foo.__instance else: Foo.__instance = Foo() return Foo.__instance # ########### 获取实例 ########### obj = Foo.singleton() |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |