各位大神,求助python对象部分问题
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小白,希望有人帮忙解答一下,非常感谢!
问题一:
self单词的字面意思是“自己的”
在类的方法参数中一般self用来表示类的实例化对象。
类的方法分两种:一种是类方法,一种是类实例化方法
前者调用的时候直接用类名.方法名 进行调用,后者调用的时候必须是先创建类的实例化对象,然后实验 实例化对象名.方法名 进行调用
一般常见的都是实例化方法,类实例化方法的第一个参数是固定的,指代实例化对象,在方法中使用到实例化属性的时候,写作self.属性名(就像你的程序中的self.num、self.fish等)
与之相类似,类的便令也是分两类,有的是类属性变量,有的是类实例化属性变量。前面带有self的变量为类实例化属性变量,前面什么都没有的是类属性变量
这个self只是习惯性写法,你写什么都可以。你可以把所有的self都统一改成别的也是一样的
问题二:
在Pool类中self.turtle是该类的实例化成员变量,该变量初始化为Turtle类的实例化对象,而Turtle类的是有num属性的,所以可以写self.turtle.num
这就好像是一个大箱子里面装有两个小箱子,一号箱子中装的书,二号箱子装的是零食。你可以说拿出一号箱子,也可以说拿出一号箱子的一本书,这都不会出错,因为大箱子中有一号箱子,而一号箱子有书 1. 这个 self 是习惯问题,所有的属性和方法都是要通过 self.xxx 的方式获得的
self 是大家约定俗成的写法,换成其他(例如 myself 但不仅限)也可
2. 因为 Pool 类里为 self.turtle 赋值为 Turtle 类,而 Turtle 类里是有 num 属性的,所以可以直接使用 self.turtle.num 访问(self.fish.num 同理) sunrise085 发表于 2020-8-29 10:56
问题一:
self单词的字面意思是“自己的”
在类的方法参数中一般self用来表示类的实例化对象。
非常感谢,已经搞明白了{:5_108:} _2_ 发表于 2020-8-29 20:01
1. 这个 self 是习惯问题,所有的属性和方法都是要通过 self.xxx 的方式获得的
self 是大家约定俗成的写法 ...
感谢回答,帮我理解了这块内容,谢谢
页:
[1]