relation()方法和默认学号的问题

relation()方法和默认学号的问题

老师,您好。我的练习代码如下:

class Person(object):
   # 重写实例对象的构造(初始化)方法
   def __init__(self, name, gender):
       self.name = name
       self.gender = gender

   # 自定义实例方法,格式化打印实例属性name的值
   def speak(self):
       print('hello!我是{name}'.format(name = 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.__stu_num = stu_num

   # 自定义实例方法,格式化打印实例属性stu_num的值
   def speak(self):
       super(Student, self).speak()
       print('我的学号为{stu_num},很高兴认识大家'.format(stu_num = self.__stu_num))

   # 自定义实例方法,判断学号是否为既定值,并根据判断结构 进行分类打印
   def identify_stu(self):
       if self.__stu_num == '2018014002':
           print('我的分组已完成')
       else:
           print('请稍后,马上为你自动分组')

   # 自定义实例方法,设置实例对象的学号为传入的值
   def set_num(self, new_num):
       self.__stu_num = new_num

   # 自定义实例方法,判断该类是否为Person类的子类,并进行分类打印
   def relation(self):
       if issubclass(Student, Person):
           print('我的父类是Person')
       else:
           print('父类正在查询中......')

if __name__ == '__main__':
   stu = Student('小明', '男', 90, '数学')
   # 调用speak方法 打印stu对应的值
   stu.speak()

   # 调用实例方法 鉴别学号是否为指定值
   stu.identify_stu()

   # 调用实例方法 鉴别实例对象所属的类的父类是否为Person
   stu.relation()

   print("******************")
   stu_2 = Student('小红', '女', 89, '英语')
   # 调用实例方法 设置stu_2的学号为'2018040625'
   stu_2.set_num('2018040625')

   # 调用实例方法 打印stu_2对应的值
   stu_2.speak()

   # 调用实例方法 鉴别学号是否为指定值
   stu_2.identify_stu()


就是想问一下子类Student中这个relation()方法有更好的实现方案么?我感觉自己写得比较生硬,就是太直白的感觉了。还有个问题,就是关于默认学号'2018014002'的问题,这边其实有两处用到了这边这个值,一处用来默认初始化学生的学号,另一处则是在identify_stu()中,用来进行比较了,感觉可以单独抽离出来成为一个常量处理,但不是很清楚怎么实现比较好。

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好,

1、使用relation( )函数判断一个类是否是另一个类的子类是没有问题的,题目要求判断Student是否为Person的子类,同学的代码符合题目要求。同学觉得生硬,是觉得relation( )方法中只能判断2个固定的类,写法不够灵活吗,同学也可以对本题进行拓展,定义两个参数,调用时传入类的名称,灵活判断,参考如下代码

http://img1.sycdn.imooc.com//climg/5f326e8f09794c9e08610486.jpg

http://img1.sycdn.imooc.com//climg/5f326f6809582f5806100123.jpg

2、默认学号可以单独抽离出来,调用的时候引用该变量的名即可

http://img1.sycdn.imooc.com//climg/5f3272ce096e69cd11050545.jpg

http://img1.sycdn.imooc.com//climg/5f3272f909f0da4c08750274.jpg

同学思维敏捷、严谨,能活学活用,非常棒,祝学习愉快~~~

  • 慕勒3498910 提问者 #1
    谢谢老师的回答了。 1、确实就是感觉我写的relation( )方法功能太单一,就觉得不是太好的写法,用老师提供的参考案例代码,通用性更强,我觉得也更好。 2、之前就是不太清楚默认初始化这个学号的时候,怎么才能用到类变量来处理,原来直接写类变量名就可以了;identify_stu()这个方法处,我是想到可以直接使用类变量的,这下可以统一来管理这个默认学号,那就让人比较舒服了。
    2020-08-11 22:38:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师