标签:复杂 解释 成绩 else 概念 ast code 参考 对象
2018/6/25 星期一 9:56:21
面向过程会这样实现,我们程序的执行流程是:
std1 ={‘name‘:‘yang‘,‘score‘:99}
std2 = {‘name‘:‘wen‘,‘score‘:99}
def print_score(std):
print(‘{0}:{1}‘.format(std[‘name‘],std[‘score‘]))
如果采用面向对象的设计思想。Student应该是一个对象,这个对象拥有name和score这两个属性,如果打印出学生的成绩,必须有student,然后才能把成绩打印出来:
class Student(object):
def __init__(self,name,score):
self.name = name
self.score = score
def print_score(self):
print(‘{0}:{1}‘.format(self.name,self.score))
给对象发消息实际上就是调用对象的相关函数,我们成为对象的方法:
yang = Student(‘yangaoteng‘,100)
wen = Student(‘wangwenwen‘,99)
yang.print_score()
wen.print_score()
还以上面的例子,在Python中,定义类通过class关键字:
class Student(object):
pass
定义好了Student类,可以创建出Student的实例,创建实例通过类名+()现实:
yang = Student()
这时候可以自由的给一个实例绑定属性
yang.name = ‘yangaoteng‘
yang.score = 1000
由于类有的时候会起到模板的作用,我们可以在创建实例的时候,把我们一些任务必须绑定的属性填写进去。我们可以通过一个特殊的 __ init __(前后个有两个_),在创建实例的时候,就可以把 name , score 等属性绑定上去:
class Student():
def __init__(self,name,score):
self.name = name
self.score = score
有了__ init__ 方法,在创建实例的时候,就不能传入空的函数了,必须传入与__ init __ 方法匹配的参数,但self不需要传,Python解释器会自动上传进去。
>>> yang = Student(‘yangaoteng‘,100)
>>> yang.name
’yangaoteng‘
>>> yang.score
59
做到这里我们就可以搞事情了,我们可以对数据进行分类,大于90分的成绩为’A‘....,进行男女的分类。等等,对数据进行处理
# 创建一个实例,对男女进行分类,对‘成绩进行分类’
class Student():
def __init__(self,name,score,sex):
self.name = name
self.score = score
self.sex = sex
def Student_score(self):
a=‘男‘
if self.sex ==‘男‘:
a= ‘男‘
elif self.sex == ‘女‘:
a= ‘女‘
if self.score >=80:
print(‘姓名{0},性别{1},成绩A‘.format(self.name,a))
elif self.score >=60:
print(‘姓名{0},性别{1},成绩B‘.format(self.name,a))
elif self.score >=0:
print(‘姓名{0},性别{1},成绩C‘.format(self.name,a))
else:
print(‘666‘)
但是,从前面的Student类的定义看,外部代码还是可以自由的修改实际的name
、score
属性:
>>> yang = Student(‘yangaoteng‘,100,‘男‘)
>>> yang.score
100
>>> yang.score=0
>>> yang.score
0
这样我的成绩就被改变成了0分,显然是不可能的。如果想让内部属性不被外部访问,可以在属性名称前面加上两个下划线 __
,在Python中,实例的变量如果以__
开头,就是私有变量(private),只有内部可以访问,外部不可以访问。
class Student(object):
def __init__(self,name,score):
self.__name = name
self.__score = score
def print_score(self):
print(‘{0}:{1}‘.format(self.__name,self.__score))
改变完成之后,就无法通过外部访问了
>>> yang = Student(‘yangaoteng‘,100,‘男‘)
>>> yang._name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: ‘Student‘ object has no attribute ‘__name
这样参数被隐藏了,我们无法在内部进行访问,我们就可以更好的处理数据。
#
class Student():
def __init__(self, name, score):
self.__name = name
self.__score = score
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_name(self,name):
self.__name = name
def set_score(self,score):
if 0<=score<=100:
self.__score = score
else:
raise ValueError("数值不规范,请输入(0-100)的数字")
def print_score(self):
print("{0}:{1}" % (self.__name, self.__score))
标签:复杂 解释 成绩 else 概念 ast code 参考 对象
原文地址:https://www.cnblogs.com/yangaoteng666/p/9224486.html