鱼C论坛

 找回密码
 立即注册
查看: 772|回复: 2

[已解决]关于self的问题

[复制链接]
发表于 2020-6-11 11:44:22 | 显示全部楼层 |阅读模式

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

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

x
class Ball():
        def Setname(self,name):
                return name
        def kick(self):
                print('我叫%s,该死的,谁踢我'%self.name)

class Ball():
        self.name='小甲鱼'
        def kick(self):
                print('我叫%s,该死的,谁踢我'%self.name)

为什么这两个会报错?关于self还是不太懂
最佳答案
2020-6-11 11:45:36
本帖最后由 Twilight6 于 2020-6-11 11:57 编辑


第一个代码:
你参数传入的 name 变量是局部变量,你要通过赋值给 self.name 才能在其他方法内使用:
  1. class Ball():
  2.     def Setname(self, name):
  3.         self.name = name
  4.         return self.name

  5.     def kick(self):
  6.         print('我叫%s,该死的,谁踢我' % self.name)
复制代码



第二个代码:

带self的属性 是实例属性,要在方法内,不能写在方法外,方法外写的是 类属性,而不是实例属性
  1. class Ball():
  2.     name = '小甲鱼'  # 属于类属性

  3.     def kick(self):
  4.         print('我叫%s,该死的,谁踢我' % Ball.name) # 这边的Ball.name 就是调用Ball内的类属性
复制代码


关于self还是不太懂

self 简单的理解就是被实例的对象,举个例子当你写了一个类 比如 A 类 你实例化 A类:
  1. a = A()
复制代码

这个时候 a 就代表 方法里面的 self 参数,你当你调用这个实例化对象的属性 a.name 也就是 self.name  此时的 self = a

分享下我当时网上整理的笔记:
类、实例、局部变量



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 11:45:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-11 11:57 编辑


第一个代码:
你参数传入的 name 变量是局部变量,你要通过赋值给 self.name 才能在其他方法内使用:
  1. class Ball():
  2.     def Setname(self, name):
  3.         self.name = name
  4.         return self.name

  5.     def kick(self):
  6.         print('我叫%s,该死的,谁踢我' % self.name)
复制代码



第二个代码:

带self的属性 是实例属性,要在方法内,不能写在方法外,方法外写的是 类属性,而不是实例属性
  1. class Ball():
  2.     name = '小甲鱼'  # 属于类属性

  3.     def kick(self):
  4.         print('我叫%s,该死的,谁踢我' % Ball.name) # 这边的Ball.name 就是调用Ball内的类属性
复制代码


关于self还是不太懂

self 简单的理解就是被实例的对象,举个例子当你写了一个类 比如 A 类 你实例化 A类:
  1. a = A()
复制代码

这个时候 a 就代表 方法里面的 self 参数,你当你调用这个实例化对象的属性 a.name 也就是 self.name  此时的 self = a

分享下我当时网上整理的笔记:
类、实例、局部变量



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-11 11:51:58 | 显示全部楼层
本帖最后由 1223253411 于 2020-6-11 11:56 编辑

你的关注点错了
这不是self的错
第一个:self.name完全不知道是什么,字面意义上的,根本不存在,为什么,没创建这个变量。
第二个: 类变量,直接在类的下面创建的就是类变量,self纯粹就是语法报错,就像你在随便哪个地方都不能用 点 ,点啊,下划线OK

你想知道self是什么,你得先了解 def __init__(self) 这个初始化函数,不然我相信很难为你解释什么是self是什么,因为self是对象的本身,好了 ,停,等你知道了对象的初始化在去细想一下,那就会变得通俗了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 18:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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