jbzd111 2021-05-04 16:23 采纳率: 100%
浏览 36
已采纳

python初学者遇到一个问题,不知道怎么去改,烦请各路大神帮忙看一下,谢谢!

#!/usr/bin/python3
#schoolmis.py
import datetime
class person:

    def __init__(self,nid,name,gender,birthday):
        def isrunnian(year):
            if (year%4==0 and year%400==0) or (year%4==0 and year%100!=0) :
                return True
            else :
                return False

        def isdate(*args):
            if args[0]<0 or args[1]<0 or args[1]>12 or args[2]<0 or args[2]>31 :
                return False
            if isrunnian(args[0]) and args[1]==2 and args[2]<=29  :
                return True
            if args[1] in [1,3,5,7,8,10,12]  :
                if args[2]<=31 :
                    return True
                else :
                    return False
            else :
                if args[2] <=30 :
                    return True
                else :
                    return False
            if not (isinstance(name,str) and gender in ("F","M")):
                raise ValueError("gender:",gender)
            if not isdate(*birthday) :
                raise  ValueError("birthday:",birthday)
            try:
                birth=datetime.date(*birthday)
            except:
                raise ValueError("birthday:",birthday)
            self._nid=nid
            self._name=name
            self._gender=gender
            self._birthday=birth
def __str__(self):
        return ",".join((self._nid,self._name,self._gender,str(self._birthday)))

def birthday(self):
        return self._birthday

def gender(self):
        return self._gender

def name(self):
        return self._name

def nid(self):
        return self._nid
class student(person):
    def __init__(self,nid,name,gender,birthday,study):
        super().__init__(nid,name,gender,birthday)
        self._study=study
        self._score=dict()
    def __str__(self):
        return ",".join((super().__str__(),self._study))
    def setscore(self,courseid,score):
        self._score[courseid]=score
    def score(self,courseid):
        return self._score[courseid]   
    def scores(self):
        return self._score
    def setstudy(self,study):
        self._study=study
    def study(self):
            return self._study
class manager(person):
    def __init__(self,nid,name,gender,birthday,office):
        super().__init__(nid,name,gender,birthday)
        self._office=office

    def __str__(self):
        return ",".join((super().__str__(),self._office))

    def setoffice(self,office):
        self._office = office

    def office(self):
        return self._office
class teacher(person):
    def __init__(self,nid,name,gender,birthday,department):
        super().__init__(nid,name,gender,birthday)
        self._department=department
    def __str__(self):
        return ",".join((super().__str__(),self._department))
    def setdepartment(self,department):
        self._department=department
    def department(self):
        return self._department
if __name__=="__main__" :
    p1=person("001","张三","M",(2000,1,1))
    print(p1)
    print(p1.nid(),p1.name(),p1.gender(),p1.birthday())
    s1=student("00001","王五","M",(2002,2,28),"哲学")
    print(s1)
    s1.setstudy("会计学")
    s1.setscore("B001",89)
    s1.setscore("B002",91)
    print(s1)
    print(s1.nid(),s1.name(),s1.gender(),s1.study(),s1.study(),s1.score("B001"),s1.scores())
    t1=teacher("0001","元元","M",(1989,9,23),"讲师")
    print(t1)
    t1.setdepartment("副教授")
    print(t1.department())
    m1=manager("0002","白云","F",(1971,3,4),"教务处")
    print(m1)
    m1.setoffice("科技处")
    print(m1.office())


 

  • 写回答

4条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-05-04 16:55
    关注

    题主贴出来的代码,问题不少。出现题主所说的错误,直接原因是person类的__str__、birthday、gender、name、nid这几个方法的缩进提前了,成了孤立的函数,导致找不到person的name方法。即使这个问题解决了,题主可能还会遇到其他问题,因为person类的构造函数里面有定义了两个内部函数isrunnian和isdate,isrunnian尽在isdate中被调用,而isdate则只被自身调用(递归),也就是说,在实例化的时候isdate函数不会被调用,里面的self._name=name自然也不会被执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)