2-3编程练习问题
来源:2-3 编程练习
起风了__
2020-02-06 21:35:20
请问我调用父类的__init__构造方法正确了吗?
并且在Student类中的set_num(new_num)方法,需要更新学号的值,那这个值需要在__init__方法里声明吗?如何声明?
4回答
好帮手乔木
2020-02-07
同学你好:
1、子类继承父类方法的写法:
super(子类,self).函数(参数1,参数2,....)
super().函数(参数1,参数2,....) 该形式只在python3适用。
还有一种经典写法:
父类名称.函数(self,参数1,参数2,...)
因此同学需要将标注的位置去掉。
2、关于num属性,同学可以直接在__init__函数中定义初始化即可。
例如:
identify_stu()方法是判断学号的。
参考:
参考代码:
class Person(object): # 重写实例对象的构造(初始化)方法 def __init__(self,name,gender): self.name = name self.gender = gender # 自定义实例方法,格式化打印实例属性name的值 def speak(self): print("hello!我是{}".format(self.name)) # 自定义实例方法,占位作用 def relation(self): pass class Student(Person): # 重写实例对象的构造(初始化)方法,并调用父类构造方法,实现对实例属性的赋值 def __init__(self,name,gender,score,major,stu_num=2018014002): super(Student,self).__init__(name,gender) self.score = score self.major = major self.num = stu_num # 自定义实例方法,格式化打印实例属性stu_num的值 def speak(self): super(Student, self).speak() print("我的学号为{},很高兴认识大家".format(self.num)) # 自定义实例方法,判断学号是否为既定值,并根据判断结构 进行分类打印 def identify_stu(self): if self.num == 2018014002: print("我的分组已经完成") else: print("请稍后,马上为你自动分组") # 自定义实例方法,设置实例对象的学号为传入的值 def set_num(self,new_num): self.num = new_num # 自定义实例方法,判断该类是否为Person类的子类,并进行分类打印 def relation(self): if issubclass(Student,Person): print("我的父类是Person") else: print("父类正在查询中")
如果我解决了同学的问题,请采纳!学习愉快^_^。
coffeehyh
2020-02-12
参考 好帮手乔木 的答案就ok了。
调用父类的方法有三种方式,建议直接使用最新、最简单、最方便的方法:
super().方法名(参数1, 参数2...)
用到你这里,就是:
super().__init__(name, gender)
关于stu_num属性的设置,使用默认值参数最方便也最灵活。
即:
def __init__(self, name, gender, score, major, stu_num='2018014002'):
super().__init__(name, gender)
self.score = score
self.major = self.major
self.stu_num = stu_num
由于这里使用了默认值参数,所以在实例化对象的时候,可以不传入stu_num的值也能正常初始化。
另外,stu_num 的数值类型,建议使用字符串格式,这是因为避免在实际项目中,可能会遇到id号开头为0的情况下,使用整型不方便。
为学习而奋斗
2020-02-06
(2):之前给同学的代码,同学可以看一下,这里我就只截取一部分,在这里的 set_num(self,new_num):方法中的这个参数,传给self.stu_nu,此时,这个值如果变化了下面的判断也就跟着变化,例如小红传入的值是201804062,然后就会将这个数值传入到set_num(self,new_num)中,将这个值赋值给self.stu_nu,然后传回到构造函数里面进行重新赋值,在判断语句中就发生了变化直接的就变成走到else去了,打印的就是else的输出内容,具体的应该是这样子的声明~
def identify_stu(self):
if self.stu_nu == 2018014002:
print("我的分组已经完成")
else:
print("请稍后,马上为你自动分组")
而小明的是2018014002,应对了上面的if语句,所以执行if语句的话~
为学习而奋斗
2020-02-06
同学,您好:
def __init__(self , name , gender , score , major):
super(Student,self).__init__(name,gender)#在父类已经实例化该方法,只需要实例化子类的属性值
self.score = score
self.major = major
self.stu_nu = 2018014002
(1):同学可以参考我以上的代码,当然之前同学的那个代码也是正确的,当然调用父类的方法有很多种
同学这里使用了两种的调用方法,其实只需要super这个方法就可以了,因为他的依赖于它的父类,所以,同学可以使用这个 super(Student,self).__init__(name,gender)跟我的这个一样就OK~当然都是可以 的只不过不需要同时出两个调用父类的方法,就是super(Person,self)和Person.__init__(name,gender)
一种就可以了~而且,同学的super(Student,self)应该在后面再补上.__init__()然后里面传入父类有的参数即可,而且这个super(Student,self)里面的应该是子类加self才对,不是父类加self,同学要弄清楚哟~
def __init__(self , name , gender , score , major):
super(Student,self).__init__(name,gender)#在父类已经实例化该方法,只需要实例化子类的属性值
self.score = score
self.major = major
self.stu_nu = 2018014002
def set_num(self,new_num):
self.stu_nu = new_num
(2):之前给同学的代码,同学可以看一下,这里我就只截取一部分,在这里的 set_num(self,new_num):方法中的这个参数,传给self.stu_nu,此时,这个值如果变化了下面的判断也就跟着变化,例如小红传入的值是201804062,然后他就会把值传给self.stu_num之后发生改变判断语句,具体的应该是这样子的声明~
def identify_stu(self):
if self.stu_nu == 2018014002:
print("我的分组已经完成")
else:
print("请稍后,马上为你自动分组")
也就变成了else:输入下面的内容,而小明的是2018014002,应对了上面的if语句,所以执行if语句的话~
相似问题