__init__()方法
__init__()方法的重要性主要体现在亮点:
- 对象声明周期的开始:初始化即使对象生命周期的开始,也是非常重要的一个步骤---->每个对象都必须正确的执行初始化才能够正常的工作。
- __init__()方法的参数可以多种形式来完成赋值:传参方式的多样化,意味着对象的初始化过程也有很多。
延迟赋值
请看这篇文章:OOP object基类:https://www.cnblogs.com/liveforlearn/p/15208448.html
object作为所有类基类,已经为__init__方法提供了默认的实现,一般情况下不需要重写这个函数。
对于集成自object的子类,总可以对它的属性进行扩展。例如链接中的Student类,扩展了学习时间属性,和学习效率属性。
实例化的就不对函数(get_knowlede)所需的变量(learn_time,length)进行初始化。
这就意味着:__init__()方法被调用时,不必为所有的属性赋值
类的层次结构
通过实现__init__()方法来初始化一个对象。每当创建一个对象,python会先创建一个的空对象,然后该对象调用__init__()函数。
这个方法提供了对象内部变量以及其他一些一次性过程的初始化操作。
e.g:纸牌21点游戏
1 # -*- ecoding: utf-8 -*- 2 # @ModuleName: samplest_demo 3 # @Function: 4 # @Author: 甲壳虫~~~ 5 # @Time: 2021/8/30 23:04 6 #@blog:https://www.cnblogs.com/liveforlearn 7 8 class Card: 9 def __init__(self, rank, suit): 10 self.suit = suit 11 self.rank = rank 12 self.hard, self.soft = self._points() 13 14 class NumberCard(Card): 15 def _points(self): 16 return int(self.rank), int(self.rank) 17 18 class AceCard(Card): 19 def _points(self): 20 return 1, 11 21 22 class FaceCard(Card): 23 def _points(self): 24 return 10, 10
__init__()把公共初始化方法引入到了基类Card中:这样3个子类都能够共享公共的初始化逻辑。
这是常见的多态设计,每个子类为_points()方法提供了特有的实现。所有的子类有相同的方法名和属性。
Card类可以把牌面(rank(‘A’, 1, 2, 3, ...,, ‘J ‘, ‘Q‘, ‘K‘))和花色(suit,(梅花, 方片, 黑桃, 红桃))作为参数传入来实例化。