鱼C论坛

 找回密码
 立即注册
查看: 1714|回复: 18

[已解决]self的用法

[复制链接]
发表于 2020-2-2 14:55:20 | 显示全部楼层 |阅读模式

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

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

x
class MyClass:
                name = 'FishC'
                def myFun(self,name):
                        self.name = name
                def myname(self):
                        print("Hello FishC!")

                       
>>> MyClass.myFun()
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    MyClass.myFun()
TypeError: myFun() missing 2 required positional arguments: 'self' and 'name'
>>> MyClass.myname()
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    MyClass.myname()
TypeError: myname() missing 1 required positional argument: 'self'


想问一下大家这里面那块出错了呢,self不是这么用的吗?
最佳答案
2020-2-2 15:12:32
1005663861 发表于 2020-2-2 15:11
所以我这个里面的self是怎么用才可以呢

self就是用来标记这个方法就是这个class里面的
你只要把它实例化就好
myclass = MyClass()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-2 14:57:50 | 显示全部楼层
要加self参数
MyClass.myFun(self, name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 14:58:34 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-2-2 15:04 编辑


话说回来你这个函数没加参数啊
而且你定义了两个参数
最好是先将它实例化:
myclass = MyClass()
这样调用类里面的方法就不用加self了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:03:52 | 显示全部楼层
qiuyouzhi 发表于 2020-2-2 14:58

话说回来你这个函数没加参数啊
而且你定义了两个参数

哪个是定义了两个参数啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:04:47 | 显示全部楼层
def myFun(self,name):
#self和name 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:05:08 | 显示全部楼层
qiuyouzhi 发表于 2020-2-2 14:58

话说回来你这个函数没加参数啊
而且你定义了两个参数

>>> class MyClass:
                name = 'FishC'
                def myFun(self,name):
                        self.name = name
                def myname():
                        print("Hello FishC!")

                       
>>> MyClass.myname()
Hello FishC!

这样就可以打印出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:07:07 | 显示全部楼层
因为参数里没有加self,也就是说这不是属于myclass的,
只是放进去一个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:08:01 | 显示全部楼层
你可以试试,它是无法调用类里边所定义的变量的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:09:53 | 显示全部楼层

self不是类的参数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:10:38 | 显示全部楼层
1005663861 发表于 2020-2-2 15:09
self不是类的参数吗

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

使用道具 举报

发表于 2020-2-2 15:11:10 | 显示全部楼层
class MyClass:
                name = 'FishC'
                def myFun(self,name):
                        self.name = name
                def myname(self, name):
                        print(name)
你把那个self去掉,看能不能打印出name
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:11:30 | 显示全部楼层

所以我这个里面的self是怎么用才可以呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:12:32 | 显示全部楼层    本楼为最佳答案   
1005663861 发表于 2020-2-2 15:11
所以我这个里面的self是怎么用才可以呢

self就是用来标记这个方法就是这个class里面的
你只要把它实例化就好
myclass = MyClass()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:18:48 | 显示全部楼层
qiuyouzhi 发表于 2020-2-2 15:12
self就是用来标记这个方法就是这个class里面的
你只要把它实例化就好
myclass = MyClass()

基本上明白了

那这个出错是什么原因<function MyClass.myname at 0x000002343D6441F0>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:20:37 | 显示全部楼层
1005663861 发表于 2020-2-2 15:18
基本上明白了

那这个出错是什么原因

你是把我代码拷过去了是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:21:28 | 显示全部楼层
你得先定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:23:46 | 显示全部楼层
qiuyouzhi 发表于 2020-2-2 15:12
self就是用来标记这个方法就是这个class里面的
你只要把它实例化就好
myclass = MyClass()

那我的理解是把类实例化是不是就是用一个实际的值用来表示类,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:25:07 | 显示全部楼层
1005663861 发表于 2020-2-2 15:23
那我的理解是把类实例化是不是就是用一个实际的值用来表示类,

可以这么理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 15:42:10 | 显示全部楼层
self就是实例化对象本身
比如你在类里面调用方法,使用self.xx  经过是实例化之后,就是obj.xxx这样的调用方式

类函数调用方式分三种
class test:

    def a(self):
        pass

    @staticmethod
    def b():
        pass

    @classmethod
    def c(cls):
        pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 15:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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