吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1481|回复: 12
收起左侧

[求助] 面向对象的一些疑惑?

[复制链接]
甜萝 发表于 2022-6-26 21:44
本帖最后由 paypojie 于 2022-6-26 22:36 编辑

                                                     面向对象的疑惑之处


代码是这样的
[Python] 纯文本查看 复制代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class Parent:        # 定义父类
   parentAttr = 100
   def __init__(self):
      print ("调用父类构造函数")
 
   def parentMethod(self):
      print ('调用父类方法')
 
   def setAttr(self, attr):
      Parent.parentAttr = attr
 
   def getAttr(self):
      print ("父类属性 :", Parent.parentAttr)
 
class Child(Parent): # 定义子类
   def __init__(self):
      print ("调用子类构造方法")
 
   def childMethod(self):
      print ('调用子类方法')
 
c = Child()          # 实例化子类
c.childMethod()      # 调用子类的方法
c.parentMethod()     # 调用父类方法
c.setAttr(200)       # 再次调用父类的方法 - 设置属性值
c.getAttr()          # 再次调用父类的方法 - 获取属性值

以上代码执行结果如下:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
调用子类构造方法
调用子类方法
调用父类方法
父类属性 : 200
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
但是有一点看不太明白  运行c.childMethod() # 调用子类的方法
为啥输出结果会是
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
调用子类构造方法
调用子类方法
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
不应该只会输出
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
调用子类方法
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
想不明白 为啥会多输出个 调用子类构造方法
难道是调用 c.childMethod()方法时 就先自动调用__init__()方法
有点难搞

免费评分

参与人数 1热心值 +1 收起 理由
zcchk135820 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

grekevin 发表于 2022-6-26 22:11
c.childMethod()中的c从哪里来的,不就是c = Child()这句实例化出来的。类实例化会自动调用__init__方法
 楼主| 甜萝 发表于 2022-6-26 22:25
本帖最后由 paypojie 于 2022-6-26 22:39 编辑
grekevin 发表于 2022-6-26 22:11
c.childMethod()中的c从哪里来的,不就是c = Child()这句实例化出来的。类实例化会自动调用__init__方法

差不多懂了
实例化类 也就是说 创建实例对象 c = Child() 就会自动调用初始化方法__init__()

三滑稽甲苯 发表于 2022-6-26 22:56
paypojie 发表于 2022-6-26 22:25
差不多懂了
实例化类 也就是说 创建实例对象 c = Child() 就会自动调用初始化方法__init__( ...

是这样的,实例化一个类就会调用__init__,销毁(del)一个实例就会调用__del__
 楼主| 甜萝 发表于 2022-6-26 23:11
三滑稽甲苯 发表于 2022-6-26 22:56
是这样的,实例化一个类就会调用__init__,销毁(del)一个实例就会调用__del__

谢了 虽然差不多理解了
Keing 发表于 2022-6-27 09:26
在创建对象的时候就会调用构造函数,你 c = Child() 这里 会自动调用构造函数的
 楼主| 甜萝 发表于 2022-6-27 12:06
Keing 发表于 2022-6-27 09:26
在创建对象的时候就会调用构造函数,你 c = Child() 这里 会自动调用构造函数的

嗯呢 嘿嘿
xyz349925756 发表于 2022-6-27 15:42
__init__ 理解为初始化功能你就会明白了。可以看下我的这张图。
1.png
XiaoZouYu 发表于 2022-6-27 17:40
__init__在你创建对象的时候就会被调用
 楼主| 甜萝 发表于 2022-6-27 21:49
xyz349925756 发表于 2022-6-27 15:42
__init__ 理解为初始化功能你就会明白了。可以看下我的这张图。

基本上懂了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表