面向对象程序设计的中心就是把客观事物抽象为程序世界里一段段代码,校园里的主体是学生,泛泛的学生包含很多属性,比如姓名、学号、所在学院、专业、性别、住址、联系电话。。。。。。等等,有这些属性,需要操纵它们的动作,比如读取姓名、设置姓名、读取学号、设置学号。。。。。。等等,这就是我们课堂说的属性和方法,对于属性和方法,我们又有访问控制方式限制,标示为public、private、protected等,根据以上的信息,请给出一个完整的学生类定义:Student,并测试输出n个该类对象的各项属性值。
输入
第一行表示要输入n个对象
后续各行输入不同对象的各属性值,每个对象一行。
输出
输出不同对象的各自属性
每个对象占一行
输入样例1
2 WangHai 2014150112 CSSE ComputerScience male South215 13760222222 LiBin 2013151292 CSSE SoftwareEngineering female South318 13677777777
输出样例1
WangHai 2014150112 CSSE ComputerScience male South215 13760222222 LiBin 2013151292 CSSE SoftwareEngineering female South318 13677777777
自学就是麻烦,这和C系列的面向对象差别还是蛮大的,有着C++面向对象基础的我只是单纯把C++代码写成Python就花了我一个多小时。
第一个就是我不懂python的对象数组怎么创建,首先是python没有数组这个玩意,然后我知道有个东西叫列表,在CSDN网上搜了大半个小时,终于找到了:
student=[Student() for i in range(n)]
但是我的代码还是运行不出正确结果,解释过程没有问题,没有语法错误,但输入数据运行的时候说我的name未定义,我一开始的类定义是这样的,大佬勿笑喷,昨天学的类知识:
class Student:
def datain(self):
name,num,college,major,gender,address,telephone=input().split()
def dataout(self):
print(name,num,scollege,major,gender,address,telephone)
然后调用dataout函数的时候就说我的name未定义。
于是我想到变量生命期的问题。
又去搜了一波,写成这样:
class Student:
name='test'
def datain(self):
name,num,college,major,gender,address,telephone=input().split()
def dataout(self):
print(name,num,scollege,major,gender,address,telephone)
没影响,还是说name未定义。
于是我给它来一个构造函数:
class Student:
def __init__(self):
name='test'
def datain(self):
name,num,college,major,gender,address,telephone=input().split()
def dataout(self):
print(name,num,scollege,major,gender,address,telephone)
还是name未定义……
我要疯了……
最后尝试性的加了个self
行了我去
class Student:
def datain(self):
self.name,self.num,self.college,self.major,self.gender,self.address,self.telephone=input().split()
def dataout(self):
print(self.name,self.num,self.college,self.major,self.gender,self.address,self.telephone)
n=int(input())
student=[Student() for i in range(n)]
for i in range(0,n):
student[i].datain()
for i in range(0,n):
student[i].dataout()