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

Python实现子类调用父初始化实例

前言 python中进行面向对象编程,当在子类实例中调用父属性时,由于子类__init__方法重写了父__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错。...***方式进行调用。但是如果通过名直接调用方法,self参数就不会被自动绑定到实例上,可以绑定到我们指定实例上。也就是子类实例上,在这里就是B了。...所以这里所说未绑定__init__方法 就是指未绑定父实例__init__方法。...__init__(self) # 此处修改了。...以上这篇Python实现子类调用父初始化实例就是小编分享给大家全部内容了,希望能给大家一个参考。

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

Mongodb PHP封装API实现基本插入修改查询删除操作

1:该版本API实现了 Mongodb 中最基本插入/修改/查询/删除操作封装 2:其它更高级操作可通过 $this->getMongo() 得到原生对象,更多API请自行查阅 Mongo PHP...手册,后续版本将会对增加更多原生API封装 3:该类所有API接口中 $query 查询参数使用请以下有关 [查询条件说明文档] 4: 如果要存储中文字符,则一定要使用 utf8 编码. 5...* * @var object MongoDB */ private $_db = nul /** * 修改器命令前缀 * * @var string */ private $_cmd...* array( * 'host'=>'localhost', // 主机名或IP地址 * 'port'=>27017, // 端口 * 'cmd'=>'$', // 修改器命令前缀...query 查询条件,如果为空数组则更新所有记录.具体请看 [查询条件说明文档] * @param string $option 操作选项,可选择项如下; * * 'set':只修改指定字段

2.7K20

Effective-java-读书笔记之类和接口

(或接口)只是在某一个内部被用到, 就应该考虑使它成为那个私有嵌套.对于成员(域, 方法, 嵌套嵌套接口), 有四种可能访问级别(可访问性递增):私有的(private).包级私有的(package-private...如java.awt包中Point和Dimension.让公有直接暴露域虽然从来都不是种好办法, 但是如果域是不可变, 这种做法危害就比较小一些(但是仍然questionable).第17条 使可变性最小化不可变...: 其实例不能被修改....它们却错误地使用了继承.在决定使用继承而不是复合之前, 还应该问自己最后一组问题: 对于你正在试图扩展, 它API中有没有缺陷呢?...方法行为若不依赖于标签值, 就把方法放在抽象中.所有方法都用到数据域放在抽象中, 特定于某个类型数据域放在对应子类中.这个层次纠正了前面所提到标签所有缺点.第24条 优先考虑静态成员嵌套

67071

Python 工匠:使用装饰器技巧

尝试用实现装饰器 绝大多数装饰器都是基于函数和 闭包 实现,但这并非制造装饰器唯一方式。...但除了函数外,我们也可以让任何一个(class)变得“可被调用”(callable)。办法很简单,只要自定义 __call__ 魔法方法即可。...与纯函数相比,我觉得使用实现装饰器在特定场景下有几个优势: 实现有状态装饰器时,操作类属性比操作闭包内变量更符合直觉、不易出错 实现为函数扩充接口装饰器时,使用包装函数,比直接为函数对象追加属性更易于维护...使用 wrapt 模块编写更扁平装饰器 在写装饰器过程中,你有没有碰到过什么不爽事情?不管你有没有,反正我有。...我经常在写代码时候,被下面两件事情搞得特别难受: 实现带参数装饰器时,层层嵌套函数代码特别难写、难读 因为函数和方法不同,为前者写装饰器经常没法直接套用在后者上 比如,在下面的例子里,我实现了一个生成随机数并注入为函数参数装饰器

50310

Python 工匠:使用装饰器技巧

02 最佳实践 一 尝试用实现装饰器 绝大多数装饰器都是基于函数和 闭包 实现,但这并非制造装饰器唯一方式。...但除了函数外,我们也可以让任何一个(class)变得“可被调用”(callable)。办法很简单,只要自定义 __call__ 魔法方法即可。...更容易实现一个同时兼容装饰器与上下文管理器协议对象(参考 unitest.mock.patch) 二 使用wrapt模块编写更扁平装饰器 在写装饰器过程中,你有没有碰到过什么不爽事情?...不管你有没有,反正我有。...我经常在写代码时候,被下面两件事情搞得特别难受: 实现带参数装饰器时,层层嵌套函数代码特别难写、难读 因为函数和方法不同,为前者写装饰器经常没法直接套用在后者上 比如,在下面的例子里,我实现了一个生成随机数并注入为函数参数装饰器

61730

KVO实现原理

@属性值改变了 - %@ - %@", object, keyPath, change, context); } 以上代码就是一个KVO简单实现,但是我们有没有想过他内部到底是怎样实现呢,今天我们就来探究一下...KVO内部实现原理 KVO内部实现 探究一个对象底层实现最简单办法就行打印一些对象信息,看看有什么改变 我们在给person1添加监听之前分别打印p1,p2信息 代码实现 NSLog(@"person1...KVO会在运行时动态创建一个新,将对象isa指向新创建,新是原子类,命名规则是NSKVONotifying_xxx格式。...1、利用RuntimeAPI动态生成一个子类NSKVONotifying_XXX,并且让instance对象isa指向这个全新子类NSKVONotifying_XXX 2、当修改对象属性时,会在子类...,如果不记录旧值,那就没有改变一说了 3、直接修改成员变量会触发KVO吗 不会触发KVO,因为KVO本质就是监听对象有没有调用被监听属性对应setter方法,直接修改成员变量,是在内存中修改,不走

1.1K00

Java中三大特性 - 超详细篇

,它没有方法体,即方法实现代码为空,比如abstract public void fun(); 抽象方法一般在子类中进行实现,它就好像是在说:我不写代码,我只是声明一个方法名,剩下交给我子孙后代(继承...那个D好像是多余 不多余 这个D其实就是上面讲到抽象作用:将共有的部分fun()抽象出来(或者提供一个基础实现),然后子类分别去实现各自,这也是多态一种体现(下面会将多态) 如果没有D...(男人是人,is-a关系) 如果子类和父只是包含或者引用关系,那么这个继承关系就很糟糕(猫是猫笼,包含关系) 有没有什么办法可以阻止继承?...有,如果一个方法内容过长,又误被当做内联处理,那么就会影响性能 比如你代码多个地方都调用这个方法,那么你代码就会膨胀变得很大,从而影响性能 那有没有办法可以解决呢?...场景很多,这里说两个最常用 场景一:方法参数,即方法定义时,父作为方法形参,然后调用时传入子类作为方法实参 场景二:方法返回值,即方法定义时,父作为方法返回值,然后在方法内部实际返回子类

48410

Java 中三大特性(超详细篇)

,它没有方法体,即方法实现代码为空,比如abstract public void fun(); 抽象方法一般在子类中进行实现,它就好像是在说:我不写代码,我只是声明一个方法名,剩下交给我子孙后代(继承...那个D好像是多余 不多余 这个D其实就是上面讲到抽象作用:将共有的部分fun()抽象出来(或者提供一个基础实现),然后子类分别去实现各自,这也是多态一种体现(下面会将多态) 如果没有...(男人是人,is-a关系) 如果子类和父只是包含或者引用关系,那么这个继承关系就很糟糕(猫是猫笼,包含关系) 有没有什么办法可以阻止继承?...有,如果一个方法内容过长,又误被当做内联处理,那么就会影响性能 比如你代码多个地方都调用这个方法,那么你代码就会膨胀变得很大,从而影响性能 那有没有办法可以解决呢?...场景很多,这里说两个最常用 场景一:方法参数,即方法定义时,父作为方法形参,然后调用时传入子类作为方法实参 场景二:方法返回值,即方法定义时,父作为方法返回值,然后在方法内部实际返回子类

51910

Python中接口协议和抽象基

__setitem__ = set_card shuffle(deck) 这就是一段猴子补丁技术实现代码,没有修改FrenchDeck源码,而是在运行时动态修改。...抽象基 Python抽象基是指必须让继承它子类实现它所要求方法。...交流群和公司都有人问过我这个问题,写了太多ifelse有没有更好实现方式,我想这里已经给出了答案。 鸭子类型和白鹅类型 Python鸭子类型是指对象类型无关紧要,只要实现了特定协议即可。...白鹅类型是指只要cls是抽象基(即cls是abc.ABCMeta),就可以使用isinstance(obj, cls)。它基本特性是,即便不继承,也有办法把一个注册为抽象基虚拟子类。...Python不会检查虚拟子类是否实现了抽象基要求实现方法,而是由我们自己保证,并捕获异常。具体会在下篇文章《Python抽象基定义与使用》进行介绍。

1.7K30

关于IoC与AOP一些理解

在没有IOC时代,A依赖B接口,但是接口又不能实例化,因此A需要知道B子类,然后实例化B子类,这种依赖实际上是依赖具体实现,而不是依赖接口,不符合面向对象设计原则依赖倒置原则。...那么IOC出现就是为了反转这个依赖,也就是控制反转意义。有了IOC,A只需要依赖B接口,运行时需要B实现子类会自动注入进来,这是IOC魅力所在。...B创建依赖A public B(A a) { this.a = a; } } 那么结果自然是死锁,A需要B才能实例化,B需要A才能实例化,系统中有没有两个实例,互相僵持就是死锁,无法解决循环依赖问题...解决办法也很简单,就是获取到代理,然后再执行这个方法,对于Spring,可以从ApplicationContext中获取到当前HelloService实例,这里获取到自然是代理,然后利用该实例调用...动态代理之后会产生一个代理,那么把这个当成target,也就是AOP后要转向真实操作,封装后然后接着AOP,就实现嵌套.本质上是一样道理,既然都是实实在在,那么就可以一直嵌套下去,这样嵌套一般会形成一个功能链

59110

减少该死 if else 嵌套

把ShareItem抽象出来,作为基础,然后针对每种业务各自实现子类: ?...(注意:上面每个子类构造方法还对每个字段做了空值处理,为空的话,赋值default,这样如果用户传了空值,在调试就会发现问题。) 实现了多态后,分享接口就简洁多了: ?...但如果是第三方分享SDK功能的话,这样暴露给用户增加了很多(各ShareItem子类,相当于把if else抛给用户了),用户接入成本提高,违背了“迪米特原则”了。...把ShareItem子类访问权限降低,在暴露给用户里定义几个方法,在内部帮助用户创建具体分享类型,这样用户就无需知道具体了: ? 或者有人会说,这样用户也需额外了解多几个方法。...2、利用多态,把业务判断消除,各子类分别关注自己实现,并实现子类创建方法,避免用户了解过多。 3、把分支状态信息预先缓存在Map里,直接get获取具体值,消除分支。

1.3K20

为Java程序员金三银四精心挑选五十道面试题与答案

继承了原始特性,新称为原始派生子类),而原始称为新(父)。派生可以从它那里继承方法和实例变量,并且可以修改或增加新方法使之更适合特殊需要。...【基础】 答:JVM 中装载是由ClassLoader 和它子类实现,Java ClassLoader是一个重要Java 运行时系统组件。它负责在运行时查找和装入文件。...然而可以创建一个变量,其类型是一个抽象,它用于要创建一个体现某些基本行为,并为该类声明方法,但不能在该类中实现该类情况。不能创建abstract 实例并让它指向具体子类一个实例。...Abstract 子类为它们父所有抽象方法提供实现,否则它们也是抽象为。取而代之,在子类实现该方法。知道其行为其它可以在实现这些方法。接口(interface)是抽象变体。...是否可以implements(实现)interface(接口)? 【基础】 答:可以继承其他实现其他接口,在swing 编程中常用此方式。 45、内部类可以引用他包含成员吗?有没有什么限制?

83460

Kotlin学习日志(五)与对象

1.3 带默认参数构造函数 说到默认参数,不知道你有没有想起之前带默认参数函数呢?...其实很简单,open不控制某个对象访问权限,只决定该对象能否繁衍开来,说白了,就是公告这个叼毛有没有资格繁衍下一代,只有头戴open帽子,才允许作为基派生出子类来,而头戴open帽子函数,表示它允许在子类中进行重写...,如果没戴open帽子,该类就只好打光棍了,函数没戴open帽子的话,孩子就没有办法修改它。...四、特殊 4.1 嵌套 一个可以在单独代码文件中定义,也可以在另一个内部定义,后一种情况叫作嵌套,即A嵌套在B之中,听起来和Java嵌套是一样,但其实有所差别,Java嵌套允许访问外部类成员...4.2 内部类 Kotlin限制了嵌套不能访问外部类成员,那还有什么方法可以实现此功能呢?

1K20

Kotlin中级(9)- - - Kotlin之数据、密封、内部类.md

Int) 2.数据声明条件 主构造函数最少要有一个参数 数据主构造器所有参数必须标记为val或var 数据不能是抽象、open、封闭、内部类 数据不能继承自任何其他(但可以实现接口)...(Koltin要修改数据属性,则使用其独有的copy()函数。其作用就是:修改部分属性,但是保持其他不变) 密封 1....但是,其密封子类扩展是是可以在程序中任何位置,即可以不在同一文件下 2.声明 sealed class SealedExpr() 内部类(嵌套) 在实际开发中,用到内部类地方是很多。...().嵌套方法/属性 } 注意 调用嵌套属性或者方法格式为: 外部类.嵌套().嵌套方法/属性。...从声明上看,继承两个单独声明,子类通过(子类:父)继承父,而内部类必须声明在外部类里面,并且用关键字inner标记 从访问上看,继承不能直接访问子类,外部类可以通过“外部类().内部类

1.1K20

SpringMVC结合设计模式:解决MyBatisPlus传递嵌套JSON数据难题

引出 我们经常会遇到需要传递对象场景。有时候,我们需要将一个对象数据传递给另一个对象进行处理,但是又不希望直接暴露对象内部结构和实现细节。这时,我们可以使用模板模式来实现优雅对象传递。...为了实现这个场景,我们可以使用模板模式。 模板模式是一种行为设计模式,它定义了一个抽象或接口作为模板,其中包含了一个或多个抽象方法,用于定义算法骨架。...具体子类可以根据需要实现这些抽象方法,从而完成算法定制化。...还有很多...各种嵌套 于是我想 有没有一种办法能规定好所有的嵌套方法逻辑 然后他们只需要说明自己是什么类型 就能套进去?...和sql语句 也能轻松查询嵌套复杂JSON数据啦 实现效果 这样就形成了复杂嵌套数据自动构造

8010

读书笔记 | 使用 | Effective Java 3

图形定义核心计算面积抽象方法,交由具体子类实现 子类差异化实现,业务对标签强管控转化为业务使用具体子类 子类子类之间运算逻辑互相独立,业务关注自身使用子类即可,不会导致文件膨胀 子类相似实现也会更加灵活...,可以通过子类继承子类实现,如正方形面积计算就可以继承矩形,长和宽都传入正方形边长即可 // Class hierarchy replacement for a tagged class abstract...尽管句法相似,但这两种嵌套是非常不同。 非静态成员每个实例都隐含地与其包含宿主实例相关联。...如果嵌套实例可以与其宿主实例隔离存在,那么嵌套必须是静态成员:不可能在没有宿主实例情况下创建非静态成员实例。...非静态成员实例和其宿主实例之间关联是在创建成员实例时建立,并且之后不能被修改。通常情况下,通过在宿主实例方法中调用非静态成员构造方法来自动建立关联。

35520

常见代码重构技巧(非常实用)

子类可以扩展父功能,但不能改变父原有的功能 父中凡是已经实现方法(相对于抽象方法而言),实际上是在设定一系列规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改...与方法调用不同是,继承打破了封装性。子类依赖于其父中特定功能实现细节,如果父实现随着发行版本不同而变化,子类可能会遭到破坏,即使他代码完全没有改变。...自从Java8为接口增加缺省方法(default method),这两种机制都允许为实例方法提供实现。主要区别在于,为了实现由抽象定义类型,必须称为抽象一个子类。...因为这些默认方法是被注入到现有实现,它们实现者并不知道,也没有许可 接口缺省方法设计目的和优势在于: 为了接口演化 Java 8 之前我们知道,一个接口所有方法其子类必须实现(当然,这个子类不是一个抽象...不提供任何会修改对象状态方法 保证不会被扩展(防止子类化,声明为final) 防止粗心或者恶意子类假装对象状态已经改变,从而破坏该类不可变行为 确保对任何可变组件互斥访问 如果类具有指向可变对象

61910

常见代码重构技巧(非常实用)

数据泥团/基本类型偏执 两个、方法签名中包含相同字段或参数 应该使用但使用基本类型,比如表示数值与币种Money、起始值与结束值Range 不合理继承体系 继承打破了封装性,子类依赖其父中特定功能实现细节...子类可以扩展父功能,但不能改变父原有的功能 父中凡是已经实现方法(相对于抽象方法而言),实际上是在设定一系列规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改...与方法调用不同是,继承打破了封装性。子类依赖于其父中特定功能实现细节,如果父实现随着发行版本不同而变化,子类可能会遭到破坏,即使他代码完全没有改变。...自从Java8为接口增加缺省方法(default method),这两种机制都允许为实例方法提供实现。主要区别在于,为了实现由抽象定义类型,必须称为抽象一个子类。...因为这些默认方法是被注入到现有实现,它们实现者并不知道,也没有许可 接口缺省方法设计目的和优势在于: 为了接口演化 Java 8 之前我们知道,一个接口所有方法其子类必须实现(当然,这个子类不是一个抽象

77020
领券