0
点赞
收藏
分享

微信扫一扫

171111 Learning Python Chapter 25 OOP-The Big Picture

小_北_爸 2023-03-27 阅读 93


:同函数和模块一样,类是封装逻辑(函数)与数据的另外一种方式。

  • 为什么选用类?
  • 继承
  • 组合
  • 多重组合
  • 通过继承进行定制
  • 运算符重载

171111 Learning Python Chapter 25 OOP-The Big Picture_属性值


属性继承搜索

超类
↑
类1-类2
↑
对象1-对象2

object.attribute:

由对象出发,自下而上,自左向右
逐层向上搜索树,寻找属性名称出现的最低(最后更新定义或修改)的地方。
代码隐藏了这种数的形状。

I2.w→C3.w:

I2→C1→C2→C3:自下而上,自左向右,找到首个w即停止,找不到w就报错。
将I2.W解析为C3.w

多重继承的时候,左右顺序的定义如下

Class C2:
Class C3:
Class C1(C2,C3)

类和实例
- 类和实例的主要差异:类是一个产生实例的工厂。
- 实例则有数据项,即带有数据的记录
- 类通常有函数,即处理记录的“程序”
- 类和模板的主要差异:模板在内存空间中只有一个实例,而类可以依据需要任意增加。

类方法的调用

I2.w即“调用C3.w函数处理I2”,也就是说I2.w( )会调用映射C3.w(I2)调用,
传入【该隐含的实例作为继承的函数的第一个参数**】。
Python把隐含的实例传进方法中的第一个特殊的参数,习惯上将其称为self。

编写类树

class C2:...        # make class objects
class C3:...
class C1(C2,C3):...   # Linked to superclass
I1=C1()           # Make istance objects
I2=C2()

  • 类在圆括号中由左至右列出的顺序,会决定其在类树中由左至右的搜索的顺序。

def出现在Class类的内部的时候,通常称为方法,而且会自动接收第一个特殊参数self

Python中的self相当于C++中的指针
self自动引用正在处理的实例

class C1( ):
    def setname(self,who):
        self.name = who
I1 = C1( )
I2 = C1( )
I1.setname('bob')
I2.setname('mel')
print(I1.name)
print(I2.name)

bob
mel

在Python类中,初始化解析表达式-构造函数 __init__, 在实例调用的时候,类名**括号后的对象属性值**C1(‘Bob’),自动赋予给了当前的对象

传入__init__的第一个参数是新的实例对象自身即self
传入__init__的第二个参数是创建实例对象时括号内的具体属性值

  • 如果类中编写或继承了_init_方法,则每次类实例创建时,Python会自动调用它。
  • 如果没有_init_方法,实例刚创建时就是一个简单的空的命名空间
  • self是第一参数,后面的是第二,第三,…参数

class C1( ):
    def __init__(self,who,how):   
        self.name = who
        self.grade = how
I1 = C1('Bob','98')
I2 = C1('Mel','97')
print(I1.name,I1.grade)
print(I2.name,I2.grade)

Bob 98
Mel 97

小结:在深入学习Python类的时候,要记住Python的OOP(Object-Oriented Programming)模型非常简单,及时在对象树中搜索属性。


举报

相关推荐

0 条评论