首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 工匠:写好面向对象代码的原则(中)

Admin("bar_admin") 压根不支持停用操作。...一个简单但错误的解决办法 要修复上面的函数,最直接的办法就是在函数内部增加一个额外的类型判断: def deactivate_users(users: Iterable[User]): """批量停用多个用户...比如,在这个例子里,我们先是违反了“里氏替换原则”,然后我们使用了错误的修复方式:增加类型判断。之后发现,这样的代码同样也无法符合“开放-关闭原则”。...这时因为 Admin 虽然是 User 类型的子类,但它的 list_related_posts 方法返回却是一个可迭代的生成器,并不是列表对象。而生成器是不支持 len() 操作的。...如何修改代码 为了让代码符合“里氏替换原则”。我们需要让子类和父类的同名方法,返回同一类结果。

97810
您找到你想要的搜索结果了吗?
是的
没有找到

PyTorch为何如此高效好用?来探寻深度学习框架的内部架构

为了定义 C/C++中一个新的 Python 对象类型,你需要定义如下实例的一个类似结构: // Python object that backs torch.autograd.Variable struct...PyObject* backward_hooks; }; 如上,在定义的开始有一个称之为 PyObject_HEAD 的宏,其目标是标准化 Python 对象,并扩展至另一个结构,该结构包含一个指向类型对象的指针...tensorFromBlob() 函数在内部会调用另一个名为 storageFromBlob() 函数,该函数主要根据类型为数据创建一个存储。...值得注意的是,THStorage 不包含如何解释内部数据的元数据,这是因为存储对保存的内容「无处理信息的能力」,只有张量才知道如何「查看」数据。...DLPack:深度学习框架 Babel 的希望 现在让我们来看看 PyTorch 代码库最新的一些内容——DLPack(https://github.com/dmlc/dlpack)。

1.1K60

Paddle Fluid v1.2 Release Note——PaddlePaddle深度学习框架再次升级

修复了稀疏正则和稀疏优化器的bug。 Tensor支持DLPack,方便被其他框架集成和集成其他训练框架。 OP:修复 expand op shape 推理错误的bug 支持 Selu 激活函数。...修复了 AnalysisPredictor 在GPU,在CPU 到 GPU 的 transfer data 不删除的问题。 修复了 Variable 中包含 container 内存持续增长的问题。...修复fc_op不支持3-D Tensor的问题。 修复了Analysis predictor 在GPU下执行pass时的问题。 修复了TensorRT下运行GoogleNet的问题。...GPU多机同步训练 修复Transformer、Bert模型下P2P训练模式会Hang住的问题。 文档 API 新增13篇API使用指南。 新增300个API Reference中文文档。...使用文档 新增《Operator相关注意事项》,更新《保存与载入模型变量》、《C++预测API介绍》、《使用TensorRT库预测》、《如何贡献代码》等多篇使用文档。

66330

CA1036:重写可比较类型中的方法

项 “值” RuleId CA1036 类别 设计 修复是中断修复还是非中断修复 非中断 原因 类型实现 System.IComparable 接口,并且不重写 System.Object.Equals...如果类型仅继承接口的实现,则规则不会报告冲突。 默认情况下,此规则仅查看外部可见的类型,但这是可配置的。 规则说明 定义自定义排序顺序实现 IComparable 接口的类型。...如何解决冲突 若要解决此规则的冲突,请重写 Equals。...= < > 何时禁止显示警告 如果冲突是由缺少运算符引起的,而编程语言也不支持运算符重载,则禁止显示规则 CA1036 中的警告是安全的,这与 Visual Basic 情况一样。...有关详细信息,请参阅如何禁止显示代码分析警告。 配置代码以进行分析 使用下面的选项来配置代码库的哪些部分要运行此规则。

60320

python模块之threading

python的Thread类行为是Java的Thread类行为的子集,目前尚不支持优先级、线程组,线程无法销毁、停止、暂停、恢复或中断。...如果不支持改动线程堆栈大小,抛出RuntimeError异常。如果size不合法,抛出ValueError异常,堆栈大小保持不变。 32KiB是目前能保证解释器堆栈空间充足的最小值。...只能由已获取到锁的线程调用,否则抛出RuntimeError异常。...None,3.2版本开始除非超时会返回False,其他情况都返回True wait_for(predicate, timeout=None) 阻塞当前线程直到可调用对象predicate返回值为True或bool...wait_for方法将不断调用wait()方法直到超时或满足predicate返回值为True或bool()判断为True。 返回值为最后一次执行predicate的返回值,如果超时返回False。

95040

Python类型编程

更复杂的类型 ---- 简单的类型,我们有bool,int,float,str等,也有复杂一点的tuple,list,set,dict等,不过这些几个复杂一点的类型的定义并不是太清晰,例如list,只知道是一个列表...---- typing.Tuple 元组类型; Tuple[X, Y] 是二项元组类型,第一个元素的类型是 X,第二个元素的类型是 Y。...不支持 Union[X][Y] 这种写法。 Optional[X] 是 Union[X, None] 的缩写。 typing.Any 不受限的特殊类型。 所有类型都与 Any 兼容。...例如: from typing import NoReturn def stop() -> NoReturn: raise RuntimeError('no way') class typing.NamedTuple...TypedDict 声明一个字典类型,该类型预期所有实例都具有一组键集,其中,每个键都与对应类型的值关联。运行时不检查此预期,而是由类型检查器强制执行。

72430

老司机出品——数据持久化之基于FMDB的ORM数据库设计

缺点在于呢,不支持模型等特殊数据类型不支持数据更改,只能够文件覆写。 ---- 偏好设置 其实就是我们平常使用的NSUserDefaults。...缺点是同样不支持模型等特殊数据类型。 ---- 归解档 相对于前两种方法,归解档这种方法更适应于模型等特殊数据类型的持久化。想要归解档,你的模型首先要遵循协议。...归档的优势在于它支持对象的持久化了而不是那几种特殊的数据类型,悲催的是,你仍需要确保你要归档的属性的数据类型是遵循的。...使用它开发者可以只关心数据模型中的数据,而不应考虑数据库中如何操作。他的使用方法我也是扔链接吧。...线程安全 目前已知缺点都应经在迭代中完成修复,在后续使用过程中会进行跟进。 好了,扔一个传送门:DWDatabase 欢迎Star、Issue、Pull request。

1.1K30

异常--python异常处理

NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。...所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型...未声明/初始化对象 (没有属性) UnboundLocalError 访问未初始化的本地变量 ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象 RuntimeError...以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。...class Networkerror(RuntimeError): def init(self, arg): self.args = arg 在你定义以上类后,你可以触发该异常,如下所示: try: raise

2.8K20
领券