init 的问题求看看
是不是在init下面的变量是有要求的class a:
def __init__(self,name):
self.name=name
def kick(self):
print('我叫%s,谁踢我' % self.name)
能够正常输出
一旦我稍微修改了一下init下的变量名就报错了class a:
def __init__(self,name):
c=name
def kick(self):
print('我叫%s,谁踢我' % c)
是不是都必须得以self.xx来命名啊,我一直以为变量名是随便取的。。。
那种不是init形式的方法好像就没有要求
class a:
def kick(self,name):
a=name
print('我是',a)
就像这样 a我是随便取得
你理解错了,c = name 这相当于是定义了一个局部变量 c,出了方法就不能使用了,而 self.name = name 是定义了一个类的实例属性 name,实例属性在类内部可以通过 self.xx 访问,在外部可以通过 类实例.xx 访问。 zltzlt 发表于 2020-8-13 20:34
你理解错了,c = name 这相当于是定义了一个局部变量 c,出了方法就不能使用了,而 self.name = name 是定 ...
self.name的self具体是指什么意思呢,是实例对象本身吗??不太理解 只爱整活周淑怡 发表于 2020-8-14 08:26
self.name的self具体是指什么意思呢,是实例对象本身吗??不太理解
是的,是类的实例对象本身 你只要记得,想要类里面全局都能调用就加self,只想局部调用就别加。 只爱整活周淑怡 发表于 2020-8-14 08:26
self.name的self具体是指什么意思呢,是实例对象本身吗??不太理解
如果是a.__init__,那么self就是a,self.name就是a.name
如果是b.__init__,那么self就是b,self.name就是b.name zltzlt 发表于 2020-8-13 20:34
你理解错了,c = name 这相当于是定义了一个局部变量 c,出了方法就不能使用了,而 self.name = name 是定 ...
这有点太抽象了还是没整明白import math
class Point():
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def getX(self):
return self.x
def getY(self):
return self.y
class Line():
def __init__(self, p1, p2):
self.x = p1.getX() - p2.getX()
self.y = p1.getY() - p2.getY()
self.len = math.sqrt(self.x*self.x + self.y*self.y)
def getLen(self):
return self.len
>>> p1 = Point(1, 1)
>>> p2 = Point(4, 5)
>>> line = Line(p1, p2)
>>> line.getLen()
5.0
就像这里为什么都是self.x,self.y这种的,小甲鱼好像没在视频里解释过,论坛上有详细解释吗 self指的是实例对象自身的引用,所以 self.c 是一个实例对象的变量,可以在所有方法中使用。而 c 是一个局部变量,只能在__init__方法中使用,出了这个方法就不能再使用了 只爱整活周淑怡 发表于 2020-8-14 12:46
这有点太抽象了还是没整明白
就像这里为什么都是self.x,self.y这种的,小甲鱼好像没在视频里解释过,论 ...
self.x和self.y是实例对象的变量,所以他们可以被任何方法访问和更改。
如果换成x和y,其他方法就不能去访问和更改了。
你可以这样理解:
类是一个大家庭,里面有很多方法,包括__init__。
self.x和self.y是这个家庭里所有人(方法)共有的东西,每个人(方法)都可以去使用这两个东西。
但如果是x和y,他们就是__init__方法一个人的东西,其他人(方法)不能去用这两个东西。
可以理解吗? 类里的属性和方法在内部都是通过 self.xxx 的形式访问的 其实self就是一个变量存储器
就像我们平时建立变量一样
但是普通的变量都是有限定的
就像函数内的变量是不可以在函数外调用的
那么就是这点,才发明了self这个存储器
用来存储变量,可以在一个类里边调用
页:
[1]