类变量:位于所有函数之外,类之内的变量,也称为类属性。
实例变量:位于所有函数之内,类之内的变量,以”self.变量名“方式定义,也可称为实例属性。
局部变量:位于所有函数之内,类之内的变量,以”变量名=变量值“的方式定义。
一、类变量
class Language :
# 下面定义了2个类变量
name = "Python"
add = "http//www.baidu.com"
# 下面定义了一个say实例方法
def test(self, content):
print(content)
如上所示:
name和add是类变量,类变量对于所有的实例化变量都是共享的,可以通过类的实例化对象和类名来调用类变量。
类变量调用
1.类名调用
class Language :
# 下面定义了2个类变量
name = "Python"
add = "http//www.baidu.com"
# 下面定义了一个say实例方法
def test(self, content):
print(content)
if __name__ == '__main__':
print(Language.name)
print(Language.add)
--输出:
Python
http//www.baidu.com
2.类的实例化对象调用
class Language :
# 下面定义了2个类变量
name = "Python"
add = "http//www.baidu.com"
# 下面定义了一个say实例方法
def test(self, content):
print(content)
if __name__ == '__main__':
l = Language()
print(l.name)
print(l.add)
--输出:
Python
http//www.baidu.com
修改类变量
修改类变量可以通过类名修改类变量的值,由于类变量是与所有的实例化对象共享的,所以通过这种方式修改类变量后,会影响所有的实例化对象。例子如下:
通过类名修改类变量
class Language :
# 下面定义了2个类变量
name = "Python"
add = "http//www.baidu.com"
# 下面定义了一个say实例方法
def test(self, content):
print(content)
if __name__ == '__main__':
print("修改前类变量的值")
print(Language.name)
print(Language.add)
Language.name = "Java"
Language.add = "bbb"
print("修改后的类变量的值")
print(Language.name)
print(Language.add)
print("修改后的实例变量的值")
l = Language()
print(l.name)
print(l.add)
输出:
image.png通过类的实例化对象是无法修改类变量的,通过类对象对类变量赋值,但本质不是修改类变量的值,而是在给该实例对象定义新的实例变量。
class Language :
# 下面定义了2个类变量
name = "Python"
add = "http//www.baidu.com"
# 下面定义了一个say实例方法
def test(self, content):
print(content)
if __name__ == '__main__':
l = Language()
l.name = "C++"
l.add = "ccc"
print("修改后的实例变量的值")
print(l.name)
print(l.add)
print("修改后的类变量的值")
print(Language.name)
print(Language.add)
输出:
image.png二、实例变量
class Language:
def __init__(self):
self.name = "Python"
self.add = "http//www.baidu.com"
def test(self):
self.content = "aaa"
如上所示:
name,add,content都是属于实例变量,****init****() 函数在创建类对象时会自动调用,而test()方法在无法自动调用,需要手动调用,所以在调用以上实例变量时,name和add可以通过类对象直接调用,而content需要调用test()函数才能调用。
实例变量调用
class Language:
def __init__(self):
self.name = "Python"
self.add = "http//www.baidu.com"
def test(self):
self.content = "aaa"
if __name__ == '__main__':
l = Language()
print(l.name)
print(l.add)
# 无法直接调用content,会报错
# print(l.content)
输出:
image.pngclass Language:
def __init__(self):
self.name = "Python"
self.add = "http//www.baidu.com"
def test(self):
self.content = "aaa"
if __name__ == '__main__':
l = Language()
print(l.name)
print(l.add)
l.test()
print(l.content)
输出:
image.png修改实例变量
通过类对象来修改实例变量的值,不会改变原来的实例变量的值,而是给它定义新的变量,重新赋值
class Language:
def __init__(self):
self.name = "Python"
self.add = "http//www.baidu.com"
def test(self):
self.content = "aaa"
if __name__ == '__main__':
l1 = Language()
l1.name = "C++"
l1.add = "hhh"
print(l1.name)
print(l1.add)
l2 = Language()
print(l2.name)
print(l2.add)
输出:
image.png注意:
类变量可以与实例变量同名,但类对象在调用变量时会先选择实例变量,所以这边不推荐使用类对象来调用类变量
class Language:
name = "Java"
add = "aaa"
def __init__(self):
self.name = "Python"
self.add = "http//www.baidu.com"
def test(self):
self.content = "aaa"
if __name__ == '__main__':
l1 = Language()
print(l1.name)
print(l1.add)
输出:
image.png三、局部变量
局部变量是作用与类内部的,直接以“变量名=值”的方式进行定义,局部变量只能用于所在函数中,函数执行完成后,局部变量也会被销毁。
class Language:
def test(self, count):
content = count * 8
print(content)
if __name__ == '__main__':
l = Language()
l.test(5)
--输出
40
网友评论