9-9 在实例方法中访问实例变量与类变量
看一看思维导图
Python类.png
问题如下,在实例方法的内部(强调在实例方法的内部)可以访问类变量吗?如果可以访问,那么访问的方式是什么?
class Student():
sum = 0
name = '小鱼'
age = 0
# 实例方法 定义实例方法的时候必须加上self
def __init__(self,name,age): #构造函数的意义是初始化类的特征的
#构造函数可以看做是一个特殊的实例方法。和普通的实例方法几乎是一样的
#最大的不同是,调用的方式的不同
self.name = name
self.age = age
print(self.name) #实例方法里操作实例变量
def do_homework(self):#实例方法是描述类的行为的
print('homework')
student1 = Student('石敢当',18) #调用构造函数是通过类后面加上括号的方式来调用的
student1.do_homework()#调用普通函数的是通过实例对象后面加点
print(student1.name)
print(student2.name)
print(Student.name)
# 来看一个经典的例子(容易犯错的,反面教材)
class Student():
sum = 0
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
print(self.name) #看看这个打印结果 有不一样的吗?
print(name) #看看这个打印结果 有不一样的吗?打印结果如图1,都是一样的,为什么?
def do_homework(self):
print('homework')
student1 = Student('石敢当',18)
#当我们把形参列表中的name改成name1 看看结果是什么?如图2
class Student():
sum = 0
name = '小鱼'
age = 0
def __init__(self,name1,age):
self.name = name1
self.age = age
print(self.name)
print(name)
def do_homework(self):
print('homework')
student1 = Student('石敢当',18)
# 为什么出现图2的错误?
# 因为self.name 读取的是实例变量,而print(name)读取的是形参列表,所以造成了假象,打印了两个一样的结果
# 所以加上self很有必要
# 如何在实例方法中访问类变量?
class Student():
sum = 0 #sum是内置函数
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
print(sum) #在实例方法中访问类变量看图3打印结果
def do_homework(self):
print('homework')
student1 = Student('石敢当',18)
# 在看一个例子
class Student():
sum1 = 0 #不是内置函数
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
print(sum1) #在实例方法中访问类变量看图4打印结果
def do_homework(self):
print('homework')
student1 = Student('石敢当',18)
# 上述的两个例子说明千万不要妄图在实例方法的内部通过不加self直接访问实例变量
# 也不要想着不加前缀来访问类变量
# 来看看正确的在实例方法中访问类变量的两种方式 如图5所示
class Student():
sum1 = 0
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
print(Student.sum1) #在内部的使用
def do_homework(self):
print('homework')
student1 = Student('石敢当',18)
print(student1.name)
print(Student.sum1) #通过大写类名加点号在加变量名,这是在外部的使用!在内部同样可以!
# 第二种方式
class Student():
sum1 = 0
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
print(self.__class__.sum1) #这种方法也可以
def do_homework(self):
print('homework')
student1 = Student('石敢当',18)
print(student1.name)
print(Student.sum1)
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
网友评论