class Student():
def __init__(self,name,score):
self.name=name
self.score=score
bart=Student("张三",55)
print(bart.name)
print(bart.score)
结果
张三
55
面向对象编程的一个重要特点就是数据封装,访问数据有时候没有必要从外部的函数访问,可以在内部定义函数访问,这就是数据封装。
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print("%s:%s" %(self.name,self.score))
bart=Student("张三",55)
print(bart.name)
print(bart.score)
bart.print_score()
结果:
张三
55
张三:55
封装的另一个好处是为类增加新的方法。
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print("%s:%s" %(self.name,self.score))
def get_grade(self):
if self.score>90:
return "a"
elif self.score>=60:
return "b"
else:
return "c"
bart=Student("张三",55)
print(bart.name)
print(bart.score)
bart.print_score()
print(bart.get_grade())
结果:
张三
55
张三:55
c
在类的内部,既可以有属性也可以有方法,从类的外部调用属性和方法,隐藏了内部复杂的逻辑,但是外部代码仍然可以自由地修改属性。
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print("%s:%s" %(self.name,self.score))
def get_grade(self):
if self.score>90:
return "a"
elif self.score>=60:
return "b"
else:
return "c"
bart=Student("李四",88)
bart.score=12
print(bart.score)
结果:
12
想要内部属性不被外部访问,可以将属性的名称前加上两个下划线__变成一个私有变量,只能在内部访问,不能从外部访问。
class Student():
def __init__(self,name,score):
self.__name=name
self.__score=score
def print_score(self):
print("%s:%s" %(self.__name,self.__score))
bart=Student("wang无",822)
print(bart.__score)
结果:会报错
print(bart.__score)
AttributeError: 'Student' object has no attribute '__score'
如果想要获取内部属性,可以为类增加一些方法。
class Student():
def __init__(self,name,score):
self.__name=name
self.__score=score
def print_score(self):
print("%s:%s" %(self.__name,self.__score))
def get_name(self):
return self.__name
def get_score(self):
return self.__score
bart=Student("wang无",822)
bart.print_score()
print(bart.get_name())
结果:
wang无:822
wang无
如果又想外部数据修改内部属性,可以增加一个方法。
class Student():
def __init__(self,name,score):
self.__name=name
self.__score=score
def print_score(self):
print("%s:%s" %(self.__name,self.__score))
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_score(self,score):
self.__score=score
bart=Student("wang无",822)
bart.print_score()
print(bart.get_name())
bart.set_score(77)
print(bart.get_score())
结果
wang无:822
wang无
77
在python中,***以双下划线开头,并以双下滑线结尾的是特殊变量,可以直接访问。
网友评论