类中方法访问问题?
class Ball:def setName(self, name):
self.name = name
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
a = Ball()
a.setName('球A') #这里不明白把 ‘球A'传递给函数def setName(self, name)中的name,为什么
#def kick(self)函数可以调用def setName(self, name)函数中的name变量(self.name)?
#不是跨函数不可以访问的吗?不理解?
b = Ball()
b.setName('球B')
c = Ball()
c.setName('土豆')
a.kick()
b.kick()
c.kick()
结果:
我叫球A,该死的,谁踢我...
我叫球B,该死的,谁踢我...
我叫土豆,该死的,谁踢我... 本帖最后由 suchocolate 于 2021-9-6 21:03 编辑
class Ball:
def setName(self, name):
self.name = name# 实例变量,本实例函数间共享,正常实例变量定义要放到__init__里。
s = "test"# 函数私有变量,只在本函数内有效。
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)# 不会报错
print("我叫%s,该死的,谁踢我..." % s)# 会报错
b = Ball()
b.setName('球a')
b.kick()
self 是属于class Ball 这个类的,在这个类里的每个函数是通用的
a = Ball()
这只是创建了一个 Ball 类的名字叫 a 实体,就像只是申请了一块和 Ball 类一样大的内存空间并把它取名叫 a,里面没有内容,
a.setName('球A')
a 这个实体调用类的 setName() 方法对 a 的 name 变量进行复制,因为是实体 a 调用的,所以 setName(self, name) 中的 self可以不写,默认self为调用它的那个实体 本帖最后由 傻眼貓咪 于 2021-9-6 21:09 编辑
你的代碼和下面代碼同意思,只是你把輸入參數方法拆開來了
class Ball:
def __init__(self, name = None):
self.name = name # 初始化參數
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
a = Ball('球A') # 當你定義類同時輸入參數 '球A'
b = Ball('球B')
c = Ball('土豆')
a.kick()
b.kick()
c.kick()
你的代碼分 2 次做:定義類 + 參數賦值 Max472 发表于 2021-9-6 21:03
self 是属于class Ball 这个类的,在这个类里的每个函数是通用的
a = Ball()
这只是创建了一个 Ball 类的 ...
我是不是可以这样理解self有点类似class中的全局变量的合集,
只要类中任何函数的变量前面加(self. +变量名)=变量名(这里必须把变量名赋值给 self. +变量名),其他函数就可以访问这个变量。。
注明:但是这个变量前面必须加self. 才行,而且每个函数的第一个参数必须是self才行 zyj1214 发表于 2021-9-6 21:21
我是不是可以这样理解self有点类似class中的全局变量的合集,
只要类中任何函数的变量前面加(self. +变 ...
self 代表的是一个类的实体
你也可以不用实体调用类的方法,直接用类去调用,就是这样
a = Ball()
Ball.setName(a, '球A') // 这是类调用类内方法,要把方法的参数写全,如果用类的实体调用就可以不用写 self 参数,默认为调用它的那个实体
这样应该明白了 suchocolate 发表于 2021-9-6 21:01
class Ball:
def setName(self, name):
self.name = name# 实例变量,本实例函数间共享,正常实例变量定义要放到__init__里。
s = "test"# 函数私有变量,只在本函数内有效。
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)# 不会报错
# 这里为什么% self.name可以调用
#def setName(self, name)中的
#self.name = name# 的实例变量
print("我叫%s,该死的,谁踢我..." % s)# 会报错
b = Ball()
b.setName('球a')
b.kick()
zyj1214 发表于 2021-9-6 21:59
class Ball:
def setName(self, name):
self.name = name# 实例变量,本实例函数间共享 ...
先学习对象基础吧:https://www.runoob.com/python3/python3-class.html
页:
[1]