甜萝 发表于 2022-6-26 21:44

面向对象的一些疑惑?

本帖最后由 paypojie 于 2022-6-26 22:36 编辑

                                                   面向对象的疑惑之处


代码是这样的#!/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__()方法有点难搞

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__方法
差不多懂了 {:17_1062:}
实例化类 也就是说 创建实例对象 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__
谢了 虽然差不多理解了:victory:

Keing 发表于 2022-6-27 09:26

在创建对象的时候就会调用构造函数,你 c = Child() 这里 会自动调用构造函数的

甜萝 发表于 2022-6-27 12:06

Keing 发表于 2022-6-27 09:26
在创建对象的时候就会调用构造函数,你 c = Child() 这里 会自动调用构造函数的

嗯呢 嘿嘿:lol

xyz349925756 发表于 2022-6-27 15:42

__init__ 理解为初始化功能你就会明白了。可以看下我的这张图。

XiaoZouYu 发表于 2022-6-27 17:40

__init__在你创建对象的时候就会被调用

甜萝 发表于 2022-6-27 21:49

xyz349925756 发表于 2022-6-27 15:42
__init__ 理解为初始化功能你就会明白了。可以看下我的这张图。

基本上懂了{:1_893:}
页: [1] 2
查看完整版本: 面向对象的一些疑惑?