《零基础入门学习Python》第38讲有点不懂,希望大神来解答.
class Ball:def setname(self,name):
self.name = name
def kick(self):
print('我叫%s,该死的,谁踢我...'% self.name)
为什么要写上 self.name = name
最后一行的 self.name 不能换成 name 吗?为什么 self是该类本身,可以通过他获取到该类的属性(name),类似其他语言的this 本帖最后由 梦回连营 于 2021-4-7 20:41 编辑
不知道你能理解吗
在生成一个类对象之后会自动先运行__init__方法,所以在该方法下的代码自动生成,于是类对象自动有了该方法下的self属性。
而其他方法下写成self的形式也是为了给类对象这个属性,但只有先调用这个方法才能有这个属性,也只有也调用这个方法,其他的方法下也才能使用这个属性
如果不写成self.的形式,意味着这个量只能在该方法下使用,不能被其他方法调用
例子随便写的,可能不太好理解 在变量前加self表示这个变量是这个对象独有的,其他对象不可调用。如果不加self,就会导致当有外部变量和实例变量名字一样时,会导致对象调用变量出错。如:
class A:
def a(self, name):
name = name
def b(self):
return name
a = A()
a.a('张三')
name = '李四'
print(a.b())
李四
而加了self就不会导致这样的问题
class A:
def a(self, name):
self.name = name
def b(self):
return self.name
a = A()
a.a('张三')
name = '李四'
print(a.b())
张三
不过一般绑定属性都是在初始化的时候 <实例变量> 可以在方法中共享使用, self.开头的就是实例变量
#<<<<不考虑代码的对错,仅针对你的疑惑>>>>
class Ball:
def setname(self,name):# 方法(函数):setname / setname也称之为类Ball中的函数
self.name = name# "self."开头的是实例变量 / <实例变量> 可以在方法中共享使用
def kick(self):# 方法(函数):kick / kick也称之为类Ball中的函数
print('我叫%s,该死的,谁踢我...'% self.name)
# <<<<如果你纠结在为啥要写个self.name=name>>>> | 那么改动一下
class Ball:
def setname(self,name):
self.aaaaaa = name
def kick(self):
print('我叫%s,该死的,谁踢我...'% self.aaaaaa)
希望可以帮到你 TC_DHL 发表于 2021-4-7 23:13
可以在方法中共享使用, self.开头的就是实例变量
谢谢 弈秋呜呜呜 发表于 2021-4-7 22:28
在变量前加self表示这个变量是这个对象独有的,其他对象不可调用。如果不加self,就会导致当有外部变量和实 ...
谢谢
页:
[1]