Python学习---面向对象的学习[深入]

类的深入学习

   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

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

image

异常处理

被动异常

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'))

image

模块级别的反射:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP模型

应用层&#xff08;会话层&#xff0c;表示层&#xff0c;应用层&#xff09; HTTP FTP DNS 传输层&#xff08;传输层&#xff09; TCP UDP 网际层&#xff08;网络层&#xff09; IP 网络接口层(物理层…

c语言银行卡管理系统程序设计报告,《c语言程序设计》课程设计报告-职工信息管理系统.doc...

《c语言程序设计》课程设计报告-职工信息管理系统.doc还剩24页未读&#xff0c;继续阅读下载文档到电脑&#xff0c;马上远离加班熬夜&#xff01;亲&#xff0c;很抱歉&#xff0c;此页已超出免费预览范围啦&#xff01;如果喜欢就下载吧&#xff0c;价低环保&#xff01;内容…

今年,自动驾驶卡车将在无人驾驶的情况下上路

文章来源&#xff1a;IEEE电气电子工程师Photo: TuSimpleFirst in Freight: In 2021, San Diego–based startup TuSimple plans to deploy autonomous trucks that drive themselves from pickup to delivery without anybody on board.Tesla、Uber、Cruise和Waymo等公司承诺&…

Leetcode--102. 二叉树的层次遍历

给定一个二叉树&#xff0c;返回其按层次遍历的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果&#xff1a; [ [3], [9,20], [15…

C语言求一个数组中第k大的数,leetcode | Median of Two Sorted Arrays 寻找2个有序数组中第k大的值...

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays.The overall run time complexity should be O(log(m n)).分析本题更经典通用的描述方式时&#xff1a;给定2个有序数组&#xff0c;找出2个数组中所有元素中第…

线上服务CPU100%问题快速定位实战

功能问题&#xff0c;通过日志&#xff0c;单步调试相对比较好定位。 性能问题&#xff0c;例如线上服务器CPU100%&#xff0c;如何找到相关服务&#xff0c;如何定位问题代码&#xff0c;更考验技术人的功底。 58到家架构部&#xff0c;运维部&#xff0c;58速运技术部联合进行…

最新研究:超级人工智能,从理论上就无法控制

文章来源&#xff1a;机器之心作者&#xff1a;Charles Q. Choi 编辑&#xff1a;泽南、杜伟近日&#xff0c;一项新的研究发现&#xff0c;从理论上来看&#xff0c;人类不可能控制超级人工智能。更为糟糕的是&#xff0c;这项研究也明确了人类无法在这种 AI 生成之时发现它…

Leetcode--5274. 停在原地的方案数

有一个长度为 arrLen 的数组&#xff0c;开始有一个指针在索引 0 处。 每一步操作中&#xff0c;你可以将指针向左或向右移动 1 步&#xff0c;或者停在原地&#xff08;指针不能被移动到数组范围外&#xff09;。 给你两个整数 steps 和 arrLen &#xff0c;请你计算并返回&…

c语言多个子函数声明,C函数在多个源文件中的声明和定义

这是src1.c的内容&#xff1a;#include extern int w;//int go(char); // no need to declare here. WHY????main(){char af;go(a);printf("%d\n", w);}这是src2.c的内容&#xff1a;#include int w 99;int go(char t){printf("%c\n%d\n",t,sizeof(t)…

Leetcode--200. 岛屿数量

给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010…

看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

来源&#xff1a; 脑极体2020年已经过去&#xff0c;无论我们过得顺遂平安&#xff0c;还是过得无比艰难&#xff0c;我们应该都会记住这一年。回顾2020年&#xff0c;在这个不同寻常的疫情之年&#xff0c;科技成为人类抗击疫情的关键&#xff0c;而人工智能技术投入抗疫战争之…

公交换乘系统c语言,公交换乘的简单实现(源码)

最初是做2004年某期《程序员》杂志上的一道题&#xff0c;叫“洞穴探险”&#xff0c;结果写着写着就做到公交换乘的思路上去了。看来做GIS做久了&#xff0c;都成习惯了。后来工作忙&#xff0c;就扔下了。最近翻看以前自娱自乐时写的东东&#xff0c;看到了这段代码&#xff…

记使用talend从oracle抽取数据时,数字变为0的问题

数据源为oracle&#xff0c;字段类型为number。 发现通过mainline连接到一个logrow控件&#xff0c;输入的该字段的值为0 经过多次测试还是没发现有什么规律。 通过查看代码发现有这一句内容。 if (row2.ID ! null) { //strBuffer_tLogRow_1.append(row2.ID.setScale(-127,java…

Leetcode--494. 目标和

给定一个非负整数数组&#xff0c;a1, a2, ..., an, 和一个目标数&#xff0c;S。现在你有两个符号 和 -。对于数组中的任意一个整数&#xff0c;你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 1: 输入: nums…

C语言int r(int m),INT(M)表示什么意思?

根据官方文档描述&#xff0c;int(M)中的M表示数据显示的宽度&#xff0c;与实际存储的长度无关。1、也就是int(3)和int(11)能够存储的数据是一样的&#xff0c;都是从-2147483648到2147483647(或者0-4294967295)。2、int(M)只有联合zerofill参数才能有意义&#xff0c;否则int…

2021年值得关注的人工智能与机器学习的五大趋势

文章来源&#xff1a;科技心时代人工进行智能和机器可以学习是市场上的热门专业技术&#xff0c;其重要性在2020年达到顶峰&#xff0c;这两种信息技术发展已经到了广泛应用在各行业领域&#xff0c;其范围从电子商务到量子计算管理系统&#xff0c;从医疗诊断分析系统到消费电…

关于java子类继承以及final问题总结

(1)子类和父类如果在同一个包内&#xff0c;则子类可以继承父类的除private以外的所有成员变量和方法&#xff0c;并且权限不变&#xff1b; (2)子类和父类如果不在同一个包内&#xff0c;则子类可以继承父类的public和protected权限的成员变量和方法&#xff0c;不能继承友好型…

物理层基本概念

物理层解决如何在连接各种计算机的传输媒体上传输数据比特流 物理层定义了一些传输媒体接口的标准 定义了哪些标准&#xff1f; 1.机械特性 定义物理连接的特性&#xff0c;例如接口形状&#xff0c;引线数目&#xff0c;引脚数量等 2.电气特性 规定传输二进制位时&#…

qt android 应用程序图标大小,vs+qt 设置应用程序图标

LaTeX 学习记录4&#xff0d;字体设置LaTeX 学习记录4&#xff0d;字体设置 % 导言区\documentclass[10pt]{ctexart}%10pt为字体大小%使用ctexart后就可以不引用ctex宏包了\title{\heiti My LaTeX Document}%字体为黑体\author{\kaishu forever}%字体为楷书\date{\today}% 正文…

城市生态的机器人革命

来源&#xff1a; 脑极体城市居民能看到绿色、与自然亲近的机会&#xff0c;被高楼大厦挤压得越来越少&#xff0c;如果有一天&#xff0c;连机器人、无人车和无人机都要来侵占人类的休闲空间&#xff0c;会发生什么呢&#xff1f;至少目前看来&#xff0c;如果不采取措施&…