鱼C论坛

 找回密码
 立即注册
查看: 1352|回复: 4

[已解决]各位大神,求助python对象部分问题

[复制链接]
发表于 2020-8-29 10:19:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class Turtle:
        def __init__(self,x):
              self.num=x
class Fish:
        def __init__(self,x):
              self.num=x

class Pool:
        def__init__(self,x,y):
              self.turtle=Turtle(x)
              self.fish=Fish(y)
        def print_num(self):
              print('水池里总共有乌龟%d只,小鱼%d条!'%(self.turtle.num,self.fish.num))




问题一:请问类Turtle中的self.num这个变量名中的self有什么其他含义吗,还是只是习惯性问题,因为我看到小甲鱼视频课中好多类的代码中变量名都是以self开头的。

问题二:最后一行self.turtle这个对象调用方法num,可是上面类中没有num这个方法,是因为num和self.num等价吗,所以直接写num?
python小白,希望有人帮忙解答一下,非常感谢!
最佳答案
2020-8-29 10:56:27
问题一:
self单词的字面意思是“自己的”
在类的方法参数中一般self用来表示类的实例化对象。
类的方法分两种:一种是类方法,一种是类实例化方法
前者调用的时候直接用  类名.方法名 进行调用,后者调用的时候必须是先创建类的实例化对象,然后实验 实例化对象名.方法名 进行调用
一般常见的都是实例化方法,类实例化方法的第一个参数是固定的,指代实例化对象,在方法中使用到实例化属性的时候,写作self.属性名(就像你的程序中的self.num、self.fish等)

与之相类似,类的便令也是分两类,有的是类属性变量,有的是类实例化属性变量。前面带有self的变量为类实例化属性变量,前面什么都没有的是类属性变量

这个self只是习惯性写法,你写什么都可以。你可以把所有的self都统一改成别的也是一样的


问题二:
在Pool类中self.turtle是该类的实例化成员变量,该变量初始化为Turtle类的实例化对象,而Turtle类的是有num属性的,所以可以写self.turtle.num
这就好像是一个大箱子里面装有两个小箱子,一号箱子中装的书,二号箱子装的是零食。你可以说拿出一号箱子,也可以说拿出一号箱子的一本书,这都不会出错,因为大箱子中有一号箱子,而一号箱子有书
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-29 10:56:27 | 显示全部楼层    本楼为最佳答案   
问题一:
self单词的字面意思是“自己的”
在类的方法参数中一般self用来表示类的实例化对象。
类的方法分两种:一种是类方法,一种是类实例化方法
前者调用的时候直接用  类名.方法名 进行调用,后者调用的时候必须是先创建类的实例化对象,然后实验 实例化对象名.方法名 进行调用
一般常见的都是实例化方法,类实例化方法的第一个参数是固定的,指代实例化对象,在方法中使用到实例化属性的时候,写作self.属性名(就像你的程序中的self.num、self.fish等)

与之相类似,类的便令也是分两类,有的是类属性变量,有的是类实例化属性变量。前面带有self的变量为类实例化属性变量,前面什么都没有的是类属性变量

这个self只是习惯性写法,你写什么都可以。你可以把所有的self都统一改成别的也是一样的


问题二:
在Pool类中self.turtle是该类的实例化成员变量,该变量初始化为Turtle类的实例化对象,而Turtle类的是有num属性的,所以可以写self.turtle.num
这就好像是一个大箱子里面装有两个小箱子,一号箱子中装的书,二号箱子装的是零食。你可以说拿出一号箱子,也可以说拿出一号箱子的一本书,这都不会出错,因为大箱子中有一号箱子,而一号箱子有书
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-29 20:01:17 From FishC Mobile | 显示全部楼层
1. 这个 self 是习惯问题,所有的属性和方法都是要通过 self.xxx 的方式获得的
self 是大家约定俗成的写法,换成其他(例如 myself 但不仅限)也可
2. 因为 Pool 类里为 self.turtle 赋值为 Turtle 类,而 Turtle 类里是有 num 属性的,所以可以直接使用 self.turtle.num 访问(self.fish.num 同理)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-29 21:03:42 | 显示全部楼层
sunrise085 发表于 2020-8-29 10:56
问题一:
self单词的字面意思是“自己的”
在类的方法参数中一般self用来表示类的实例化对象。

非常感谢,已经搞明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-29 21:05:15 | 显示全部楼层
_2_ 发表于 2020-8-29 20:01
1. 这个 self 是习惯问题,所有的属性和方法都是要通过 self.xxx 的方式获得的
self 是大家约定俗成的写法 ...

感谢回答,帮我理解了这块内容,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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