a日暮途远 发表于 2021-4-7 20:28:57

《零基础入门学习Python》第38讲有点不懂,希望大神来解答.

class Ball:
        def setname(self,name):
                self.name = name
        def kick(self):
                print('我叫%s,该死的,谁踢我...'% self.name)
为什么要写上 self.name = name
最后一行的 self.name 不能换成 name 吗?为什么

情绪z 发表于 2021-4-7 20:36:56

self是该类本身,可以通过他获取到该类的属性(name),类似其他语言的this

梦回连营 发表于 2021-4-7 20:39:41

本帖最后由 梦回连营 于 2021-4-7 20:41 编辑

不知道你能理解吗
在生成一个类对象之后会自动先运行__init__方法,所以在该方法下的代码自动生成,于是类对象自动有了该方法下的self属性。
而其他方法下写成self的形式也是为了给类对象这个属性,但只有先调用这个方法才能有这个属性,也只有也调用这个方法,其他的方法下也才能使用这个属性
如果不写成self.的形式,意味着这个量只能在该方法下使用,不能被其他方法调用
例子随便写的,可能不太好理解

弈秋呜呜呜 发表于 2021-4-7 22:28:54

在变量前加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())
张三
不过一般绑定属性都是在初始化的时候

TC_DHL 发表于 2021-4-7 23:13:02

<实例变量> 可以在方法中共享使用, 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)

希望可以帮到你

a日暮途远 发表于 2021-4-11 20:19:40

TC_DHL 发表于 2021-4-7 23:13
可以在方法中共享使用, self.开头的就是实例变量




谢谢

a日暮途远 发表于 2021-4-11 20:22:51

弈秋呜呜呜 发表于 2021-4-7 22:28
在变量前加self表示这个变量是这个对象独有的,其他对象不可调用。如果不加self,就会导致当有外部变量和实 ...

谢谢
页: [1]
查看完整版本: 《零基础入门学习Python》第38讲有点不懂,希望大神来解答.