鱼C论坛

 找回密码
 立即注册
查看: 2405|回复: 10

关于类的深度基础问题

[复制链接]
发表于 2020-9-12 12:08:01 | 显示全部楼层 |阅读模式

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

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

x
class CeShi():
    bagua=10
    def __init__(self,a):
        self.a = a
    def lai(self):
        print(self.a)
        print(CeShi.a)
        bagua  # 这里直接调用变量,函数内找不到,不是应该往上一级寻找吗,为什么会报错呢?

也就是说一个类变量, 在函数内部应该是可以直接用才对, 为啥要加上self 才能用呢   其实加上类名也能用, 但是就是不理解。
外部用的话你说加上类名,我还理解,内部用也要加实例名或者类名,就不太理解了。 求大神解答!!!!!!!!

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

使用道具 举报

 楼主| 发表于 2020-9-12 12:09:05 | 显示全部楼层
当我在函数内想用变量bagua的值, 直接写bagua就会报错, 很费解啊,原来我记得是不用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 12:13:17 | 显示全部楼层
你就当私有变量和全局变量理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 12:13:29 | 显示全部楼层
从入门到富豪 发表于 2020-9-12 12:09
当我在函数内想用变量bagua的值, 直接写bagua就会报错, 很费解啊,原来我记得是不用的。

可能是 C++ 学多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 12:14:57 | 显示全部楼层
class CeShi():
    bagua=10
    def __init__(self,a):
        self.a = a
    def lai(self):
        print(self.a)
        print(CeShi.a)
        print(bagua)

c=CeShi(5)
c.lai()

C:\Users\DELL\AppData\Local\Programs\Python\Python38-32\python.exe D:/python/test/1.py
5
Traceback (most recent call last):
  File "D:/python/test/1.py", line 12, in <module>
    c.lai()
  File "D:/python/test/1.py", line 8, in lai
    print(CeShi.a)
AttributeError: type object 'CeShi' has no attribute 'a'

Process finished with exit code 1

self.a能用
CeShi.a报错了,没有说能用啊,没实例化对象前,self就表示自身吧,没说这样也能用吧
至于这个bagua,就是局部变量和全局变量的问题了,会报错:bagua未定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-12 12:59:13 | 显示全部楼层
疾风怪盗 发表于 2020-9-12 12:14
C:%users\DELL\AppData\Local\Programs\Python\Python38-32\python.exe D:/python/test/1.py
5
Trace ...

主要是内部引用用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 13:01:28 | 显示全部楼层

不懂
没实例化对象之前,内部引用__init__内初始化的属性,不是都用self.a这样的么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-12 15:45:41 | 显示全部楼层
疾风怪盗 发表于 2020-9-12 13:01
不懂
没实例化对象之前,内部引用__init__内初始化的属性,不是都用self.a这样的么

类的属性,类内部的函数调用还需要申明一下, 这个就有点说不过去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 16:50:03 | 显示全部楼层
从入门到富豪 发表于 2020-9-12 15:45
类的属性,类内部的函数调用还需要申明一下, 这个就有点说不过去了

看不懂你说的。。。。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 23:38:41 | 显示全部楼层
class CeShi():
    bagua=10

你的类,哪里定义了a属性。

init是在实例化之后定义的,实例和类的命名空间,变量空间不要弄混了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 07:46:16 | 显示全部楼层
凡是在类中定义的变量和属性只有用 类对象 或者 类本身才能访问

就像你定义的类方法一样,必须要通过类名或者对象才能调用

再看看你代码中的内容,如果是当前函数内定义的变量可以在本函数中访问,但是你所访问的变量是在函数定义之前创建的,所以不能访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 18:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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