类的深入学习

   a. Python中一切事物都是对象

    b. class Foo:

            pass       

        obj = Foo()

        # obj是对象,Foo类

        # Foo类也是一个对象,type的对象

    c. 类都是type类的对象   type(..)

      “对象”都是以类的对象 类()

    d. 类实际上是type类型的对象,所有的类都是Object的子类

创建类的方法[2种]

# 第一种:类实际上是type类型的对象,所有的类都是Object的子类
Foo = type('Foo', (object,), {'func': 'function'})# 第二种:
class Foo:def func(self):print(123)
f = Foo()
f.func()

利用metaclass创建类: 必须继承type类,同时init必须传递4个参数过去

 必须继承type类   ---代码有误---
class MyType(type): # the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases# 必须给出4个参数def __init__(self, *args,  **kwargs):  # __init__() takes 1 positional argument but 4 were givenprint('Mytype创建类对象')def __call__(self, *args,  **kwargs):  print('Mytype的call方法')def __new__(self, *args,  **kwargs):  print('Mytype的new方法')
class Foo(object, metaclass=MyType):def func(self):print(123)# 创建对象后执行init方法def __new__(self, *args, **kwargs):print('Foo的new方法')return '返回Foo的对象'
f = Foo()   # 调用MyType的__init__方法,Foo是MyType的对象,Foo()会调用MyType的__call__方法
f.func()    # Mytype创建类对象,这里是有MyType的# 123

【转载】类的创建原理图:

异常处理

被动异常

try:pass
except IndentationError as e:pass
except ValueError as e:  # 小的Exception放在Exception前面pass
except Exception as e:   # e是Exception的对象,封装了Exception信息pass
else:                    # 正常代码正常,则执行else,否则执行else pass
finally:pass                 # 出错不出错,一定要执行的代码

主动触发异常: raise Exception("Sorry")

try:raise Exception("Sorry")
except Exception as e:print(e)

自定义异常:继承Exception类来实现

class HhH(Exception):def __init__(self, msg):self.message = msgdef __str__(self):return  self.message   # 这里只需要返回就可以了,不能直接打印
try:raise HhH('hhh, Wrong')
except HhH as e:print(e)

断言assert

assert 比较的内容: 条件成立,则打印XXX,否则报错

一般用强制用户的服从,Java从1.2开始也添加了这个功能,但是一般实际中不用。Python源码中有用到

assert 1 < 5
print('hhh')

反射

1. 通过字符串操作对象的成员(方法,字段):

class Foo:def __init__(self, name, age):self.name = nameself.age = agedef fun(self):print('%s-%s' % (self.name, self.age))obj = Foo('ftl', 23)
print(obj.name)
b = 'name'
print('obj.__dict__[b]:',obj.__dict__[b])   # 通过字典取值
print("getattr(obj, 'name'):",getattr(obj, 'name'))  # 通过内置函数getattr取出值
fun = getattr(obj, 'fun')
fun()
setattr(obj, 'school', 'xupt')
print(hasattr(obj, 'school'))
print(delattr(obj, 'school'))

模块级别的反射:

class Foo():NAME = 'ftl'def hello(self):print('hello')
print(getattr(Foo, 'NAME'))
hello = getattr(Foo(), 'hello')     # 取到函数的内存地址
print(hello)
print(hello())                      # 取到函数的对象

单例模式

class Foo:__instance = Nonedef __init__(self, name, age):self.age = ageself.name = name@classmethod                          # 静态方法def get_Instance(cls):if cls.__instance:return cls.__instanceelse:cls.__instance = Foo('hhh', 23)return cls.__instancedef show(self):print(self.age, self.name)
obj = Foo.get_Instance()
obj.show()

【更多学习】

选课系统

面向对象编程更多参考

转载于:https://www.cnblogs.com/ftl1012/p/9383687.html

Python学习---面向对象的学习[深入]相关推荐

  1. Python中面向对象(学习笔记)

    文章目录 一.面向过程与面向对象 简述 面向过程编程 面向对象编程 二.类和对象 类 对象(实例) 类和对象的关系 三.类的定义 四.类中的成员 类属性 实例函数(对象函数,成员函数) 实例函数和普通 ...

  2. python学习面向对象_python学习之面向对象学习

    一.什么事面向对象,以及面向对象的优点? 面向过程优缺点: 我们知道面向过程是流水线式的编程,过程就是解决问题的步骤,把大的问题化解成小的模块 面向过程优点: 极大的降低了程序的复杂度 面向过程缺点: ...

  3. python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...

    从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 ​ 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...

  4. python继承语法_python语法学习面向对象之继承

    python语法学习面向对象之继承 只要涉及到面向对象,"类"是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念 ...

  5. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 0 和 1 的序列来代表程 ...

  6. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  7. Python学习 - 面向对象之多态

    Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855 Python学习 - 数据类型:https://blog ...

  8. python getattrribute_Python学习——面向对象高级之反射

    本篇是python的面向对象高级篇,主要描述反射.内置属性与方法.元类:为下一篇的ORM框架做好准备.废话不多说,咱就从反射开始吧. 反射 第一次听说反射这个术语,还是在自学Java的时候看到,知道了 ...

  9. 风变编程python第一关脸黑怪我喽_风变编程:Python适合编程初学者学习吗?

    来源标题:风变编程:Python适合编程初学者学习吗? 据百度大数据统计每月有4260705的用户在百度检索Python相关介绍,在大众周围,也总是充斥着各种如何学习Python的声音,许多人已经对于 ...

最新文章

  1. Uipath 学习栏目基础教学:1Uipath设计器介绍
  2. jps显示当前所有java进程pid
  3. 如何用Python画一个中国地图?
  4. 6间房,把评论添加到视频的metadata.
  5. INDEX建立方式对SQL的影响
  6. Pygame安装方法(Windows10, Python-3.7.2)
  7. 心理学在计算机方面的应用,浅析计算机在心理学研究中的应用
  8. 《开源软件架构》--nginx架构概述
  9. 拦截图片代码 精易web浏览器_精易Web浏览器 UChk验证源码
  10. 导出excel 手动拼装复杂表头
  11. 电脑登录微信,手机退出微信,电脑端微信仍然在线(IOS)
  12. macOS 开发 - 使用 ScreenSaverView 制作屏幕保护程序
  13. html标签(段落标签,换行标签,文本格式化标签和局部标签)-小白学习中
  14. PrimeNG p-tree 手动添加勾选
  15. excel怎么一次性删除所有的批注
  16. 点、线、三角形(C++)
  17. Git入门与进阶 - 总览
  18. 实用解析dmp文件内容
  19. 对接支付宝当面付,记录过程
  20. chalk.js(node终端样式库)

热门文章

  1. sklearn——AdaBoost应用
  2. ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...
  3. LeetCode 1614. 括号的最大嵌套深度
  4. 02.改善深层神经网络:超参数调试、正则化以及优化 W2.优化算法(作业:优化方法)
  5. LeetCode 67. 二进制求和
  6. LeetCode 69. x 的平方根(二分查找)
  7. 计算机等级考试试题在线测试,计算机等级考试上机练习题.pdf
  8. pythonrequest得替代_python的扩展包requests的高级用法
  9. 微信小程序的不同函数调用的几种方法
  10. python中字符串与字节转换