catalog

1、面向对象

2、类的继承(续):直接继承与间接继承

3、类方法、静态方法、属性方法

4、getitem

5、反射

6、_new_\_metaclass_

7、异常处理

1、面向对象

面向对象编程
class类(新式类:class xx(obj):,经典类 class xx:) 构造函数 __init__(self,ret1,ret2...) 在实例化时做一些类的初始化工作
析构函数 __del__ (self): 在实例释放或销毁的时候,通常做一些收尾工作,如关闭打开的临时文件、关闭数据库等
类变量
实例变量(静态属性)
方法(动态属性) object对象
encapsulation 封装
私有方法
私有属性
Inheritance 继承
继承
继承、组合
多继承
python2x上
新式类 广度优先(从左到右,先走同级)
经典类 深度优先(竖向查询,先走最深级)
python3x上
都是广度优先
Polymorphism 多态
同一个接口多种实现 把一个类变成一个具体对象的过程叫实例化
实例想调用类里面的方法是把自己变成变量传给类,所以def(self)中的self即是定义的变量
实例变量的作用域就是实例本身
当实例变量与类变量名相同时,先找实例变量。

2、类的继承

 class People(object):
def __init__(self,name):
self.name = name
def talk(self):
print('%s is talking...'% self.name) p1 = People('alex') #直接继承
class Men(People):
def __init__(self,name,age)
super(Men,self).__init__(self,name)
self.age = age #间接继承
class Women(Object)
def __init__(self,name,obj)
self.name = name
self.people = obj
def talk(self):
print('This is inherit name [%s]'% self.people.name)
print('This is defined name[%s]'% self.name) w1 = Women('wtl',p1)
w1.talk() >>>>>>this is inherit name alex
>>>>>>this is defined name wtl

3、静态方法、类方法、属性方法

类方法:
@classmethod
只能访问类变量,不能访问实例变量 静态方法:
@staticmethod
静态方法,使该方法变为类下的一个函数,与类没什么太大关系 属性方法:
@property
@setter
@deleter
使一个方法变为属性
作用:隐藏过程细节,对客户友好。
特殊的运用:
def __call__(self,*args,**kwargs):#可以给实例传参数
  code
def __str__(self):#将值返回给实例的门牌号
  code
# print(Dog.__doc__) # __doc__输出类的描述信息
# print(Dog.__module__) # 描述类从哪里导入的
# print(Dog.__class__) #描述类本身
#
# print(Dog.__dict__) # 如果对象是类,打印类里面的所有属性,不包括实例属性
# print(d1.__dict__) # 如果对象是实例化对象,输出实例化对象的属性
 class People(object):
name = 'Jinx'
def __init__(self,name):
self.name = name
self.__obj =None @staticmethod #静态方法,传入完全不相干的参数
def eat(name,food):
print('%s is eating the %s'%(name,food))
@staticmethod #传入self,在调用时需要把自己传进去
def sleep(self):
pritn('%s is sleeping.....'% self.name) @classmethod#类方法,只能调用类的变量
def play(self):
print('%s is plaing...'% self.name) @property #属性方法
def cof(self):
print('%s is eating with %s'%(self.name,self.__obj)
@cof.setter
def cof(self,food):
print('%s want to eat %s'%(self.name,food))
self.__obj = food
@cof.deleter
def cof(self):
del self.__obj
print('删完了') def __call__(self,*args,**kwargs): #可以给实例后面跟参数
print('call running:',args,kwargs) def __str__(self): #给门牌号返回一个值
print('<obj>:',self.name) p = People('alex')
p.eat('Jinx','regou')
p.sleep(p)
p.play()
p.cof
p.cof = 'kaochang'
del p.cof
d(1,2,3,'age' = 22,'salary' = 10000)
print(d)

4、getitem、setitem、delitem

 class Dog(object):
'''描述狗的特性'''
name = 'right'
def __init__(self,name):
self.name = name
self.__obj = None
self.data = {} def __getitem__(self, key):
print('in the getitem:',key)
return self.data.get(key) def __setitem__(self, key, value):
print('Setitem:',key,value)
self.data[key] = value def __delitem__(self, key):
print('__delitem__',key) d1 = Dog('alex')
d1['age'] = 20
print(d1.data)

5、反射

setattr() # 创建方法

getattr() # 获取方法

delattr() # 删除方法  delattr(p,p.name)

 class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
print('%s is talking'% self.name) p = People('alex',20) def eat(self):
print('eating with %s'% self.name) choice = input('>>>:').strip() # 方法的反射
if hasattr(p,choice): #如果存在,则运行函数
getattr(p,choice)()
else: # 如果不存在,将一个已有的函数创建为方法
setattr(p,choice,eat) #把eat这个函数付给choice,新建了一个choice的方法。
getattr(p,choice)(d) #属性的反射
if hasattr(p,choice):
getattr(p,choice)
else:
setattr(p,choice,'rink') # choice为一个变量名,‘rink’为变量的值付给变量名
print(getattr(p,choice))

6、__new__ / __metaclass__

new方法,在创造实例的时候先于init实行。

必须要有return,这个return作用是:1、告诉要实例化的类  2、调用哪个类的new来实例化

参考:https://blog.csdn.net/ll83477/article/details/76419318

 class A(object):
def __new__(cls, *args, **kwds):
print("one")
print ("A.__new__", args, kwds)
return object.__new__(B)
def __init__(cls, *args, **kwds):
print("two")
print ("A.__init__", args, kwds)
class B(object):
def __new__(cls, *args, **kwds):
print("three")
print(cls)
print(B)
print("B.__new__", args, kwds)
return object.__new__(cls)
def __init__(cls, *args, **kwds):
print ('four')
print ("B.__init__", args, kwds)
class C(object):
def __init__(cls, *args, **kwds):
print ("five")
print ("C.__init__", args, kwds)
print(C())
print( "=====================")
print (A())
print ("=====================")
print (B())

7、异常处理

异常处理

写法一
try:
code
except Error1 as e:
print e
except Error2 as e:
print e
...
except Exception as e: #Exception(所有的预判情况)但是通常放在最后处理没有预判的情况
print(未知错误,e)
else: #else 当程序正常运行时进行的操作
print(一切正常...)
finaly: #finaly 不管程序异常与否都继续往下走
code 写法2:(不建议使用)
try:
code
except (Error1,Error2....) as f:
print e
else:
print(一切正常...)
finaly:
code
 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的 常用异常

常用异常

 a = 'alex'
b = [1,2,3]
tyr:
a[1]
b[10]
except KeyError as e:
print('关键字错误',e)
except ValueError as e:
print('值错误',e)
except Exception as e:
print('未知错误',e)
else:
print('go ahead')
finally:
print('不想理你')

抛出异常

 #1\
class SQError(Exception):
def __init__(self,msg):
self.mag = msg
try:
raise SQError('数据库处理错误')
except SQError as e:
print(e) #2\
# 自定义异常错误
class MyError(ValueError):
ERROR = ("-1", "没有该用户!") # 抛出异常测试函数
def raiseTest():
# 抛出异常
raise MyError(MyError.ERROR[0], # 异常错误参数1
MyError.ERROR[1]) # 异常错误参数2 # 主函数
if __name__ == '__main__':
try:
raiseTest()
except MyError as msg:
print("errCode:", msg.args[0]) # 获取异常错误参数1
print("errMsg:", msg.args[1]) # 获取异常错误参数2

week7的更多相关文章

  1. 个人博客作业week7

    个人阅读作业week7 一.瀑布 软件工程的瀑布模型是1970年由Winston Royce提出来的,即软件的开发按照一个严格的.顺序的.单次的瀑布流开发周期.例如需求分析阶段.概要设计阶段.详细设计 ...

  2. [阅读]个人阅读作业week7(200)

    个人作业week7——前端开发感想总结 此次作业因本人(学号1200)长期不上博客所以密码遗忘,输错次数过多账号被锁,所以在SivilTaram同学的博客下挂我的作业,希望助教老师谅解~谢谢! 1. ...

  3. Spark小课堂Week7 从Spark中一个例子看面向对象设计

    Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() ...

  4. week7 ls

    week7 ls 实现ls: 实现ls -l:

  5. 个人作业week7——前端开发感想总结

    个人作业week7——前端开发感想总结 1. 反思 首先要谈谈在这次团队项目的工作中,我这边出现过的较为严重的一个问题:我和HoerWing (后端担当)合作时,最初因为我没有使用github(始终连 ...

  6. Internet History, Technology and Security (Week7)

    Week7 With reliable "pipes" available from the Transport layer, we can build applications ...

  7. Internet History,Technology,and Security -Technology: Application Protocols(Week7)

    Week7 Technology: Application Protocols This week, we’ll be covering application protocols. With rel ...

  8. 个人阅读作业Week7

    没有银弹 <没有银弹>,Brooks在该论文中,强调真正的银弹并不存在,而所谓的没有银弹则是指没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍.文中讨论到了软件工程中主要的两 ...

  9. week7 read

    对于银弹: 在<No Silver Bullet>这篇IBM大型电脑之父佛瑞德·布鲁克斯(Fred Brooks)在1987年所发表的一篇关于软体工程的经典论文中,强调了由于软件的复杂性本 ...

  10. [阅读]个人阅读作业week7

    People-oriented in Agile People-oriented in Agile One Leader Prepare Good ideas from users People-or ...

随机推荐

  1. 使用特性将数据库返回的datatable转换成对象列表

    public class ColumnMapAttribute : Attribute { private readonly string _name; public ColumnMapAttribu ...

  2. 利用phpspider爬取网站数据

    本文实例原址:PHPspider爬虫10分钟快速教程 在我们的工作中可能会涉及到要到其它网站去进行数据爬取的情况,我们这里使用phpspider这个插件来进行功能实现. 1.首先,我们需要php环境, ...

  3. @Autowired注入报错

    在用  @Autowired  注入多个类时,出现的错误 因为@Autowired 是按照类型注入,当找不到对应类型类时,才会去按照名称去找. 这时添加注解@Qualifier(“service”), ...

  4. Vue学习——学习vue必须了解的几个知识点

    node.js介绍 Node 是一个让 JavaScript 运行在服务端的开发平台,使用JavaScript也可以开发后台服务.说明白些它仅仅是一个平台,我们使用vue开发必须要安装node.js. ...

  5. python进阶(一)

    一.调试Debugging应用 (1)命令行内运行 $ python -m pdb my_script.py 这会触发debugger在脚本第⼀⾏指令处停⽌执⾏.这在脚本很短时会很有帮助.你可以通过( ...

  6. 【转载】JVM 学习——垃圾收集器与内存分配策略

    本文主要是对<深入理解java虚拟机 第二版>第三章部分做的总结,文章中大部分内容都来自这章内容,也是博客 JVM 学习的第二部分. 简述 说到垃圾收集(Garbage Collectio ...

  7. Java并发编程的艺术读后总结

    2019.04.26 - 2019.04.28扫了一遍 Chapter volatile synchronized实现原理 Java内存模型 happen-before 重排序 顺序一致性 JMM 线 ...

  8. <工厂方法>比<简单工厂>多了啥

    前言:多注重设计.仅当复习讨论! 简单工厂模式 UML图   假如有一位爱心人士,想给饥饿的流浪动物喂食.此时爱心人士身带了狗粮,但是他到处找啊找,最终只找到了猫大人,是不是有点惨兮兮.但是如果有简单 ...

  9. gradle project sync failed.please fix your project and try again-Android Studio3.1.2运行出错

    原因: 修改了工程中MainActivity.java和app文件夹下的代码后运行不了. 解决办法: 关闭Android Studio,然后再重新启动,它会再次构建gradle.

  10. HTTP 方法:Get与Post分析

    GET - 从指定的资源请求数据 POST - 向指定的资源提交要被处理的数据 GET 方法 GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处 ...