关于类的深度基础问题
class CeShi():bagua=10
def __init__(self,a):
self.a = a
def lai(self):
print(self.a)
print(CeShi.a)
bagua# 这里直接调用变量,函数内找不到,不是应该往上一级寻找吗,为什么会报错呢?
也就是说一个类变量, 在函数内部应该是可以直接用才对, 为啥要加上self 才能用呢 其实加上类名也能用, 但是就是不理解。
外部用的话你说加上类名,我还理解,内部用也要加实例名或者类名,就不太理解了。 求大神解答!!!!!!!!
当我在函数内想用变量bagua的值, 直接写bagua就会报错, 很费解啊,原来我记得是不用的。 你就当私有变量和全局变量理解 从入门到富豪 发表于 2020-9-12 12:09
当我在函数内想用变量bagua的值, 直接写bagua就会报错, 很费解啊,原来我记得是不用的。
可能是 C++ 学多了 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未定义 疾风怪盗 发表于 2020-9-12 12:14
C:%users\DELL\AppData\Local\Programs\Python\Python38-32\python.exe D:/python/test/1.py
5
Trace ...
主要是内部引用用的 从入门到富豪 发表于 2020-9-12 12:59
主要是内部引用用的
不懂
没实例化对象之前,内部引用__init__内初始化的属性,不是都用self.a这样的么
疾风怪盗 发表于 2020-9-12 13:01
不懂
没实例化对象之前,内部引用__init__内初始化的属性,不是都用self.a这样的么
类的属性,类内部的函数调用还需要申明一下, 这个就有点说不过去了 从入门到富豪 发表于 2020-9-12 15:45
类的属性,类内部的函数调用还需要申明一下, 这个就有点说不过去了
看不懂你说的。。。。。。。。。。。。。。。。{:10_284:} class CeShi():
bagua=10
你的类,哪里定义了a属性。
init是在实例化之后定义的,实例和类的命名空间,变量空间不要弄混了 凡是在类中定义的变量和属性只有用 类对象 或者 类本身才能访问
就像你定义的类方法一样,必须要通过类名或者对象才能调用
再看看你代码中的内容,如果是当前函数内定义的变量可以在本函数中访问,但是你所访问的变量是在函数定义之前创建的,所以不能访问
页:
[1]