龙空技术网

如何在基类中实现init()方法?

异步社区 178

前言:

而今你们对“python中init的用法”大体比较关怀,兄弟们都想要分析一些“python中init的用法”的相关资讯。那么小编在网络上收集了一些对于“python中init的用法””的相关文章,希望你们能喜欢,你们一起来了解一下吧!

通过实现_ init()_ 方法来初始化一个对象。每当创建一个对象 , Python会先创建一个空对象,然后调用该对象的_ init()_ 函数。这个方法提供了对象内部变量以及其他一些一次性过程的初始化操作。

以下是关于一个Card 类层次结构定义的一些例子。这里定义了一个基类和3个子类来描述Card 类的基本信息。有两个变量是参数直接赋值的,另外两个参数是通过初始化方法计算来完成初始化的。

lass Card:ef _ init__ ( self, rank, suit ):self.suit= suitself.rank= rankself.hard, self.soft = self._ points()class NumberCard( Card ):def_ points( self ):return int(self .rank), int(self.rank)class AceCard( Card ):def_ points( self ):return 1, 11class FaceCard( Card ):def_ points( self ):return 10, 10

在以上代码段中,_ init()_ 把公共初始化方法引入到了基类Card中,这样3个子类NumberCard、AceCard和FaceCard 都能够共享公共的初始化逻辑。

这是一个常见的多态设计,每个子类为_points()方法提供特有的实现。所有的子类有相同的方法名和属性。这3个子类在使用时可以通过互换对象来更换实现方式。

如果只是简单地使用字母来定义花色,就可以使用如下的代码段来创建Card 对象。

cards = [ AceCard('A', '*'), NumberCard('2','*'), NumberCard('3','*'), ]

这里枚举了Card集合中的几个Card对象,把牌面值( rank )和花色( suit)作为参数传入来实例化。从长远来看,需要一个更智能的工厂函数来创建Card 对象,因为枚举所有52张牌非常麻烦而且容易出错。

标签: #python中init的用法