鱼C论坛

 找回密码
 立即注册
查看: 2315|回复: 6

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

[复制链接]
发表于 2021-4-7 20:28:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class Ball:
        def setname(self,name):
                self.name = name
        def kick(self):
                print('我叫%s,该死的,谁踢我...'% self.name)
为什么要写上 self.name = name
最后一行的 self.name 不能换成 name 吗?为什么
最佳答案
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)

希望可以帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-7 20:36:56 | 显示全部楼层
self是该类本身,可以通过他获取到该类的属性(name),类似其他语言的this
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-7 20:39:41 | 显示全部楼层
本帖最后由 梦回连营 于 2021-4-7 20:41 编辑

不知道你能理解吗
在生成一个类对象之后会自动先运行__init__方法,所以在该方法下的代码自动生成,于是类对象自动有了该方法下的self属性。
而其他方法下写成self的形式也是为了给类对象这个属性,但只有先调用这个方法才能有这个属性,也只有也调用这个方法,其他的方法下也才能使用这个属性
如果不写成self.的形式,意味着这个量只能在该方法下使用,不能被其他方法调用
例子随便写的,可能不太好理解
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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())
张三
不过一般绑定属性都是在初始化的时候
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)

希望可以帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-11 20:19:40 | 显示全部楼层
TC_DHL 发表于 2021-4-7 23:13
可以在方法中共享使用, self.开头的就是实例变量

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表