版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
01020304第5章面向对象程序设计5.1面向对象程序设计方法概述5.2类的定义与对象的创建5.3类的继承与多态5.4类的其他特殊方法055.5综合应用案例第5章
面向对象程序设计5.1.1面向对象程序设计及其特点5.1面向对象程序设计方法概述面向对象的三大基本特征(1)封装(Encapsulation)它将数据(属性)和数据处理过程(方法)封装成一个整体,形成一个独立的模块从而隐藏对象的内部实现细节(3)多态(Polymorphism)指同一个方法在类的不同子类中可以有不同的实现方式,根据对象的不同类型来调用相应的方法(2)继承(Inheritance)描述类与类之间的关系,它允许新创建的类(称子类或派生类)继承另一个类(称父类或基类)的属性和方法第5章面向对象程序设计5.1.2类和对象的作用与关系5.1面向对象程序设计方法概述类是指有相同特征(属性)、相同行为(方法)的对象统称,是一种抽象,是创建对象的模板。前面学习的数据类型都是类,如str数据类型,即str类,是对所有字符串的抽象,封装了操作字符串的大量方法。类的作用(1)封装数据和方法。(2)实现代码复用。(3)组织代码结构。类2.对象对象是类的具体实例,是根据类这个模板创建出来的实体。在Python中,所有数据都是通过类创建的对象。例如,执行语句s="23,16"时,Python会自动创建字符串对象"23,16",变量s引用该对象3.类和对象的关系(1)抽象与具体的关系(2)创建与被创建的关系(3)一对多的关系第5章
面向对象程序设计5.2.1类的定义5.2类的定义与对象的创建1.定义类的格式class类名:#定义类的成员说明:(1)类名按标识符命名的原则来命名,类名的首字符推荐使用大写字母。(2)类的成员包括数据成员(属性)和成员函数(方法)。(3)属性是类或实例所拥有的数据项,使用变量存储属性的数据。(4)方法是类中定义的函数,用于实现特定的操作。importmathclassCircle:def__init__(self,radio):self.radio=radiodefgetArea(self):returnmath.pi*self.radio**2【例5.1】定义一个名为Circle的类(圆类)代码解释:导入math包,使用math.pi的值;radio为属性,用于存储圆半径;__init__为方法,根据类创建对象时设置圆半径;getArea为方法,返回圆的面积。第5章
面向对象程序设计5.2.2创建对象5.2类的定义与对象的创建1.对象的创建对象名=类名(参数列表)说明:参数的个数由类的__init__方法确定。该方法称为对象的构造函数,创建对象时会自动执行该函数。【例5.2】根据上面定义的Circle类创建一个半径为5的圆对象:c=Circle(5)(1)创建圆对象。自动调用类的
__new__
方法。如果类中没有定义
__new__
方法,会使用
object
类的
__new__
方法来创建实例。(2)调用__init__方法。上例中,__init__方法有self和radio二个参数。其中self就是上面创建的圆对象,radio就是Circle(5)传递的参数5。调用该方法后,圆对象的半径为5。(3)返回对象。c为对象名。可以通过c访问对象的属性和方法。2.访问对象成员访问属性格式:对象名.属性访问方法格式:对象名.方法(传递的参数列表)【例5.3】使用上面定义的Circle类创建2个圆对象,半径分别为3、10。并分别输出它们的半径和面积。c1=Circle(3)c2=Circle(10)print(f"第1个圆的半径={c1.radio}、面积={c1.getArea()}")#运行结果:第1个圆的半径=3、面积=28.27431print(f"第2个圆的半径={c2.radio}、面积={c2.getArea()}")#运行结果:第2个圆的半径=10、面积=314.159【练一练5.1】利用列表推导式创建5个圆对象,半径分别为1、3、5、7、9。依次输出它们的半径和面积。第5章
面向对象程序设计5.2.3类属性与类方法
5.2类的定义与对象的创建1.类属性类属性反映的是类的特性,其数据为所有实例共享。类属性在类内部、方法外部定义,定义格式和普通变量的定义格式相同。【例5.4】classStudent:school="巧工大学" #定义类属性2.类方法类方法主要用于对类属性或与整个类相关的操作。定义类方法需要使用
@classmethod
装饰器,并且类方法的第一个参数通常命名为
cls,代表类本身。【例5.5】classStudent:count=0 #类属性@classmethoddefget_count(cls):#类方法(返回类属性count的数据) returncls.count@classmethoddef方法名(cls[,形参])方法体第5章
面向对象程序设计5.2.3类属性与类方法
5.2类的定义与对象的创建3.类属性与类方法的调用调用类属性的语法格式:类名或对象名.类属性调用类方法的语法格式:类名或对象名.类方法(传递的参数列表)特别提示:(1)通过类名调用类属性,可以修改类属性的值。通过对象名调用类属性,只能读取类属性的值,不能修改类属性的值。(2)调用类方法时,传递的参数数据不包括类方法定义中的第一个参数。Python解释器会自动将类本身作为第一个参数传递给类方法。classStudent:count=0@classmethoddefget_count(cls):returncls.countst=Student()Student.count+=1 #通过类调用类属性,可以修改类属性的值print(st.get_count()) #通过对象调用类方法print(st.count) #通过对象调用类属性【例5.6】第5章
面向对象程序设计5.2.4对象方法与对象属性5.2类的定义与对象的创建1.对象方法对象方法主要完成对类实例的相关操作。未使用装饰器的方法为对象方法,需要在类的内部进行定义,并且方法的第一个参数通常是
self,它代表调用该方法的实例本身。【例5.7】2.对象属性self.属性名=属性值【练一练5.2】添加一个对象属性age。classStudent:count=0def__init__(self,sid,name):#定义对象方法self.sid=sid #对象属性=name #对象属性对象属性反映的是对象个体的特性。def方法名(self[,形参])方法体第5章
面向对象程序设计5.2.4对象方法与对象属性5.2类的定义与对象的创建3.对象方法和对象属性的调用对象方法主要完成对类实例的相关操作。未使用装饰器的方法为对象方法,需要在类的内部进行定义,并且方法的第一个参数通常是
self,它代表调用该方法的实例本身。【例5.8】【练一练5.3】(1)根据上例定义的类创建一个高为10、宽13的Rectangle对象,并通过对象调用输出这个Rectangle对象的高、宽和面积。(2)将上例的self参数改为其他名称,观察代码执行效果。(3)为创建的对象s2定义name属性并赋值为"first"。输出这个对象的name属性,并测试对象s1是否具有name属性。classRectangle:def__init__(self,height,width):self.height=heightself.width=widthdefarea(self):returnself.height*self.width#类内部通过self参数调用对象属性rect=Rectangle(7,8) #创建Rectangle对象s1=rect.area() #类外部通过对象调用对象方法s2=Rectangle.area(rect) #通过类名调用对象方法print(s1,s2)第5章
面向对象程序设计5.2.4对象方法与对象属性5.2类的定义与对象的创建4.对象的构造方法和析构方法(1)构造方法:也称构造函数,是类定义中以“__init__”命名的对象方法。其作用是:当创建对象时,自动调用构造方法,完成对象初始化操作。上例中,语句“rect=Rectangle(7,8)”执行时即自动调用构造方法,创建的对象传递给self参数,7传递给height参数,8传递给width参数。通过“self.height=height”和“self.width=width”语句定义了对象属性height和width,并完成赋值。语法格式:def__init__(self[,参数1,参数2,...]):self.属性1=参数1self.属性2=参数2...第5章
面向对象程序设计5.2.4对象方法与对象属性5.2类的定义与对象的创建4.对象的构造方法和析构方法【例5.9】【练一练5.4】如果在创建st1对象后,添加一条语句“st=st1”后再执行修改后的代码,观察输出结果是否相同,并分析原因。classStudent:num=0 #定义类属性def__init__(self,sid):self.sid=sidStudent.num+=1 #修改类属性def__del__(self): #析构方法Student.num-=1 #修改类属性st1=Student(2401) #创建对象st1st2=Student(2402) #创建对象st2print(Student.num) #输出类属性(创建的对象个数):2delst1 #删除对象,会执行__del__析构方法print(Student.num) #输出类属性(创建的对象个数):1(2)析构方法。析构方法也称析构函数,是类定义中以“__del__”命名的对象方法。当对象的引用计数变为0或者程序结束时,Python解释器会自动调用该方法完成相关的操作。语法格式:def__del__(self):#资源释放操作...第5章
面向对象程序设计5.2.5私有方法和私有属性5.2类的定义与对象的创建1.私有方法和私有属性的定义在类的定义中,以双下画线“__”开头命名的属性(或方法)称为私有属性(或方法),否则为公有属性(或方法)。私有属性和私有方法统称为类的私有成员。【例5.10】classStudent:__num=0 #定义类的私有属性def__init__(self,sid): #构造方法是对象的私有方法self.__sid=sid #定义对象的私有属性Student.__num+=1 #修改类属性def__del__(self): #析构方法是对象的私有方法Student.__num-=1 #修改类属性@classmethoddefgetnum(cls): #类方法returncls.__num #返回类的私有属性的值defgetsid(self): #对象方法returnself.__sid #返回对象的私有属性__sid的值st1=Student(2401) #创建对象st1st2=Student(2402) #创建对象st2print(st1.getsid(),st2.getsid())#调用对象方法输出对象的私有属性__sid的值print(Student.getnum()) #调用类方法输出类的私有属性__num的值2.私有成员的访问控制类的私有成员只能在类定义的内部由类的方法调用,外部不能调用。可以通过类或对象的公有方法获得类或对象的私有属性的值。通过定义私有成员,可以隐藏类的内部实现细节,防止外部代码直接访问和修改类的内部状态,保证数据的安全性和完整性。第5章
面向对象程序设计5.2.6静态方法5.2类的定义与对象的创建在类的定义中,使用装饰器“@staticmethod”的方法是静态方法。在逻辑上与类相关,但不需要访问类或对象的属性时,可以将这些函数定义为静态方法。在类定义内部,可以通过类名调用静态方法。在外部,可以通过类名或对象名调用静态方法。【例5.11】classMyTools:@staticmethoddefis_prime(num):#静态方法,用于判断num是否为质数ifnotisinstance(num,int):returnFalseifnum==2:returnTrueif(num%2==0)or(num<2):returnFalsek=3whilek*k<=num:ifnum%k==0:returnFalsek+=2returnTrueprint(MyTools.is_prime(29))格式:@staticmethoddef方法名([形参])方法体第5章
面向对象程序设计5.2.6静态方法5.2类的定义与对象的创建(1)对象方法:第一个参数(通常是
self)代表类的实例,方法中可通过self访问和修改对象的属性、调用对象的方法。对象方法依赖于对象,通过对象来调用。(2)类方法:使用
@classmethod
装饰器,第一个参数(通常是
cls)代表类本身,用于访问和修改类属性,类方法可以通过类名或对象调用。(3)静态方法没有
self(代表对象)或
cls(代表类)参数。参数个数只依赖于解决问题的需要。静态方法可以通过类名或对象调用。【练一练5.5】假定需要定义一个IdentityCard类(身份证类),实现以下功能:(1)创建对象时完成身份证号码、姓名的初始化(2)可以查询姓名和身份证号码,但禁止修改(3)能够判断身份证号码的有效性(4)能够从身份证号码中提取出生日期和性别信息(5)能够按省份统计已创建对象的数目(6)能够判断两个身份证号码是否属于同一个省份根据以上需求,设计类的结构。静态方法与对象方法和类方法的区别:第5章
面向对象程序设计5.3.1类的继承5.3类的继承与多态1.单继承【例5.12】定义一个哺乳动物的父类Animal和一个表示狗的子类Dog。【练一练5.6】由“classCat(Animal):pass”定义Cat子类,并创建一个cat对象后输出其name属性值。classAnimal: #定义父类def__init__(self,name): #构造方法=name #定义对象属性classDog(Animal): #定义Animal的子类defset_name(self,newname): #子类定义对象方法(父类没有该方法)=newname #继承父类的name属性,直接调用dog=Dog("汪汪") #创建Dog对象print() #继承调用Animal类的对象属性dog.set_name("旺崽") #调用Dog对象的方法修改name属性print()单继承指的是子类只继承一个父类。创建格式为:class子类名(父类名):#定义的类成员说明:在进行上述声明后,在子类的方法中,可以通过“父类名.成员名”的格式调用父类的公有成员。由子类创建的对象,也可直接调用父类的公有成员。第5章
面向对象程序设计5.3.1类的继承5.3类的继承与多态2.多继承【例5.13】
创建父类Flyable类和Swimmable类,子类Duck类。classFlyable:deffly(self):print(f"{}会飞。")classSwimmable:defswim(self):print(f"{}会游泳。")classDuck(Animal,Flyable,Swimmable): #继承多个父类。Animal类由上例定义passduck=Duck("Donald") #创建Duck对象print() #继承父类Animal的name属性duck.fly() #调用父类Flyable的方法duck.swim() #调用父类Swimmable的方法多继承指一个子类可以同时继承多个父类,创建格式为:class子类名(父类1,父类2...):#定义类的成员第5章
面向对象程序设计5.3.2方法重写5.3类的继承与多态【例5.16】classFlyable:deffly(self):print("会飞")classBird(Flyable):flag="鸟类"deffly(self):print(f"{self.flag}可在高空长距离飞行。")
super().fly() #调用父类方法bird1=Bird()bird1.fly()若父类的方法不能满足子类的需求,子类可以重写父类的方法。【例5.15】classFlyable:deffly(self):print("会飞")classBird(Flyable):flag="鸟类"deffly(self): #重写了父类Flyable的方法flyprint(f"{self.flag}可在高空长距离飞行")bird=Bird()bird.fly() #输出结果:鸟类可在高空长距离飞行在子类重写的父类方法中,可使用super()函数调用父类中的方法。第5章
面向对象程序设计5.3.3多态5.3类的继承与多态【例5.17】classDuck:defspeak(self):return"鸭子嘎嘎叫!"classChicken:defspeak(self):return"母鸡咯咯哒!"defanimal_sound(animal):returnanimal.speak()duck=Duck()chicken=Chicken()print(animal_sound(duck))print(animal_sound(chicken))多态指不同的对象可以对相同的方法做出不同的响应。在Python中,通过继承和方法重写可以实现多态。“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。”也就是说,不必关注对象的类型,只要对象具有相应的方法或属性,就可以调用。也就是通过“鸭子类型”实现多态。代码解释:Duck和Chicken类都实现了speak方法。animal_sound函数根据不同的对象调用相应的方法从而产生不同的结果。这就是鸭子类型的体现。第5章
面向对象程序设计5.4.1创建迭代器和可迭代对象5.4类的其他特殊方法1.迭代器【特别提示】利用Python的内置函数iter,可将可迭代对象(如列表、元组、集合)转换为迭代器。迭代器具有以下特点:(1)可使用for语句遍历。(2)可通过Python的内置函数next逐个迭代产生新元素。(3)迭代或遍历完成,不能再进行迭代和遍历。(4)迭代器主要保存的是访问数据的算法,通过这个算法来逐个获取关联的数据元素。【例5.18】定义ArithmeticSequence类,创建可遍历等差数列的迭代器。classArithmeticSequence:def__init__(self,start,end,common_difference=1):#构造方法self.current=start #等差数列的当前项self.end=end #等差数列的终止项(不含)mon_difference=common_difference #等差数列的公差def__iter__(self):returnself #特殊方法,必须定义def__next__(self): #特殊方法,用于迭代ifself.current<self.end:num=self.currentself.current+=mon_differencereturnnumelse:raiseStopIterationmy_as=ArithmeticSequence(1,9,2)#创建迭代器print(next(my_as),next(my_as))s=0forxinmy_as:s+=xprint(s)【练一练5.9】在上例代码的最后添加一条语句“print(next(my_as))”,观察运行结果并分析原因。迭代器(Iterator)是由实现了迭代器协议的类创建的对象。(1)__iter__方法:返回迭代器对象本身。(2)__next__方法:返回迭代器的下一个元素(没有元素时可抛出
StopIteration
异常)。第5章
面向对象程序设计5.4.1创建迭代器和可迭代对象5.4类的其他特殊方法2.可迭代对象【例5.19】定义Arithmetic类,创建可遍历等差数列的可迭代对象。classArithmetic:def__init__(self,start,end,gc=1):self.start=startself.end=endself.gc=gcdef__iter__(self):#生成器函数current=self.startwhilecurrent<self.end:yieldcurrentcurrent+=self.gcmy_as=Arithmetic(1.5,6,1.6)#创建可迭代对象s=0forxinmy_as:s+=xprint(s)可迭代对象(iterable)是指可以被for循环遍历的对象,比如列表、元组、字典、集合等都是可迭代对象。当定义了一个类并希望它的对象是可迭代对象时,有两条实现途径:(1)定义对象的__iter__方法。该方法返回一个迭代器对象,也可以是生成器函数。第5章
面向对象程序设计5.4.1创建迭代器和可迭代对象5.4类的其他特殊方法2.可迭代对象【例5.20】创建可操作无穷等差数列的可迭代对象classSuperArithmetic:def__init__(self,start,gc=1):self.start=start#等差数列的首项self.gc=gc#等差数列的公差def__getitem__(self,p):#实现正向索引和切片ifisinstance(p,int):#p为整数时,为索引操作ifp<0:raiseIndexError#无穷数列,仅支持正向索引returnself.start+self.gc*p#返回数列的第p项elifisinstance(p,slice):#p为切片对象,实现切片操作ifnotp.stop:raiseIndexError#必须指定切片的stop项a=p.startifp.startelse0#不指定切片的start时默认为0b=p.stopif(a<0)or(b<0):raiseIndexErrord=p.stepifp.stepelse1#不指定切片的step时默认为1v=[]ifa<b:ifd<=0:return[]whilea<b:v.append(self.start+self.gc*a)a+=delifd>=0:return[]whilea>b:v.append(self.start+self.gc*a)a+=dreturnvelse:raiseIndexErrorg=SuperArithmetic(1,2)print(g[0],g[6:3:1])(2)定义对象的__getitem__方法。该方法接收一个整数索引作为参数,返回对应索引位置的元素。代码解释:由于操作的是无穷等差数列,因此在__getitem__方法中限制了只能使用正向索引和切片。其中slice是Python的一个内置类,用于创建切片对象。代码中执行g[0]时,实际上是调用对象的__getitem__方法,这是参数p传递的数据是0,为int对象。执行g[6:3:1]时,会调用__getitem__方法,这是参数p传递的数据就是切片对象,切片对象主要有以下属性:
start:切片的起始位置。
stop:切片的结束位置。
step:切片的步长。第5章
面向对象程序设计5.4.2运算符重载5.4类的其他特殊方法【例5.21】创建支持序列乘法运算的类classMyList(list):def__mul__(self,x):#self*xifisinstance(x,(list,tuple)):m=len(self);n=len(x)ifm>n:m=nreturn[self[k]*x[k]forkinrange(m)]else:return[]def__rmul__(self,x):#x*selfreturnself.__mul__(x)a=MyList([1,2,3])b=(4,5,6)*ac=a*(4,6)print(b,c)在Python中,允许为自定义类重新定义运算符的行为,称为运算符重载。运算符重载通过在类中定义特殊方法(也称为魔术方法)来实现。每个运算符都对应一个特定名称的对象私有方法。使用该运算符操作对象时,会自动调用相应的方法。【练一练5.13】本例定义了二个序列的乘法规则:相同位置的元素相乘,切断元素较多的序列。试将规则修改为:元素不足补1。第5章
面向对象程序设计5.4.3其他对象转换为str对象5.4类的其他特殊方法【例5.22】classDog:def__init__(self,name,age):=nameself.age=agedef__str__(self):returnf"{}is{self.age}yearsold."#创建一个Dog对象my_dog=Dog("Buddy",3)print(my_dog)#使用print函数自动调用__str__输出字符串在类中可定义对象的私有方法__str__(self),由该类创建的对象可转换为str对象。当使用print()函数打印对象或使用str将对象转换为字符串时,__str__方法会被调用。【练一练5.14】删除上例中定义的__str__
方法,再观察代码的输出结果。第5章
面向对象程序设计5.4.4创建可调用对象5.4类的其他特殊方法【例5.23】classExample():def__init__(self,n):self.n=ndef__call__(self,a,b): #定义对象私有方法return(a+b)*self.nx=Example(12) #x为可调用对象y=x(3,4) #传参调用xprint(y) #输出:84可调用对象(callable)是指可通过“对象名(参数)”方式调用的对象。函数、类、对象方法、类方法都是可调用对象。如果在类中实现了对象的__call__方法,那么由该类创建的对象也是可调用对象。第5章
面向对象程序设计5.4.5自定义异常类
5.2类的定义与对象的创建1.基本原理异常类本质上是类,所有的异常类都直接或间接地继承自BaseException类。可以通过创建自定义异常类来满足特定的错误处理需求。2.自定义异常类以Exception(或其他异常类)为父类创建一个新的类。【例5.25】利用上例定义的strError异常类实现:如果输入的字符串不是由数字组成,则显示“字符串含有非数字字符!”,并要求重新输入。whileTrue:try:s=input("输入数字串:")forcins:ifcnotin"0123456789":raisestrError("字符串含有非数字字符!")breakexceptstrErrorase:print(e)print(f"输入的数字串是:{s}")3.应用自定义异常自定义异常不能自动触发,通常在try语句中捕获并处理由raise语句抛出的自定义异常。【例5.24】classstrError(Exception):def__init__(self,msg):self.msg=msg #定义对象属性,保存错误信息def__str__(self): #特殊方法,输出异常信息时被调用returnself.msg【练一练5.15】删除strError类中定义的__str__
方法,再完成上例的功能。第5章
面向对象程序设计5.4.6对象方法的属性化5.4类的其他特殊方法1.使用property函数【例5.26】classCircle():def__init__(self):self.__radius=0self.__pi=3.1415926def__set_radius(self,radius):ifisinstance(radius,(int,float)):self.__radius=radiusdef__get_radius(self):returnself.__radiusdef__getarea(self):returnself.__pi*self.__radius*self.__radiusdef__set_pi(self,v):ifvin(3.14,3.141,3.1416,3.14159,3.141593,3.1415926):self.__pi=vradius=property(__get_radius,__set_radius)#radius属性是可读、写属性area=property(__getarea) #area为只读属性pi=property(fset=__set_pi) #pi为只写属性property
函数是Python的内置函数,它可以将对象方法伪装成属性,像访问普通属性一样访问方法,同时对属性的访问、修改和删除操作进行控制。函数格式:property(fget=None,fset=None,fdel=None,doc=None)参数说明:全部参数均为可选参数。其中fget设置读取属性值的函数、fset设置写入属性值的函数、fdel设置删除属性的函数、doc为字符串,用于提供属性的文档说明。第5章
面向对象程序设计5.4.6对象方法的属性化5.4类的其他特殊方法2.使用@property装饰器【例5.27】使用装饰器重写上例中的Circle类classCircle():def__init__(self):self.__radius=0self.__pi=3.1415926@propertydefradius(self):returnself.__radius@radius.setterdefradius(self,radius):ifisinstance(radius,(int,float)):self.__radius=radius@propertydefarea(self):returnself.__pi*self.__radius*self.__radius@propertydefpi(self):raiseAttributeError("该属性是只写属性,不能读取!")@pi.setterdefpi(self,v):ifvin(3.14,3.141,3.1416,3.14159,3.141593,3.1415926):self.__pi=vc=Circle()c.radius=2 #radius属性是可读、写属性c.pi=3.14 #area为只读属性(未实现写方法)print(c.area) #pi为只写属性(有读属性,但调用时会触发AttributeError异常)可以使用
property
装饰器来简化
property
函数的使用。【练一练5.16】能否由“c.radius(2)”语句设置c对象的radius属性?由“c.pi(3.14)”语句设置c对象的pi属性?第5章
面向对象程序设计案例1:利用类实现学生信息管理5.5综合应用案例【问题描述】创建一个Student类(学生类),对学生基本信息(学号、姓名、身份证号码)进行管理,要求:1.创建实例时初始化学号、姓名、身份证号码。并由身份证号码得到性别、出生日期。不允许外部修改这些信息。2.包含以下数据处理的方法:(1)根据学号查询学生基本信息(学号、姓名、性别、出生日期)。(2)统计创建的Student对象数目。【案例分析】根据问题需求,可以为Student类定义以下成员:(1)对象私有属性:__sid(学号)、__name(姓名)、__card(身份证号码)、__sex(性别)、__date(出生日期)。(2)在构造方法中初始化对象的__sid(、__name和__card属性。并根据__card(身份证号码)完成对象属性__sex(性别)和__date(出生日期)的赋值。(3)类的私有属性:__stduents,为字典,以学号为键,对应的对象为键值。(4)在构造方法中更新__stduents。类方法:get_nums,返回已创建的对象数目。即类属性__stduents的键值对数目。类方法:find,根据学号查询学生基本信息(学号、姓名、性别、出生日期)。find方法包括两个参数:cls(类的引用)、sid(要查询信息的学号)。查询基本思路:如果sidincls.__students,则__students[sid]为学号为sid的Student对象。以元组形式返回该对象的学号、姓名、性别、出生日期。否则,返回None。综上所述,Student类的结构如左图所示。第5章
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年社会工作者初级笔试题库
- 2026年公务员考试申论材料分析题库
- 2026年中国摄像师初级笔试模拟题
- 2026年智能知识管理方案设计
- 妇产科护理学基础护理创新
- 寒假思想动态汇报(2篇)
- 外科护理中的护理职业素养
- 信息科技学科试题及答案
- 妇科护理心理支持汇报
- 2026年幼儿园等于号
- 工业园区碳排放管理体系 建设指南
- 医学资料 医学知识01 《心脑血管疾病》 学习课件
- 人教 五年级 数学 下册《第3课时 平移和旋转的应用》课件
- 地方标准-黑土区侵蚀沟治理工程技术规范DB23-T 3763-2024
- JJF 1375-2024机动车发动机转速测量仪校准规范
- 医药生产企业质量手册
- 河南省注册税务师协会财务预决算管理制度
- 2024年河北石家庄市市属国有企业招聘笔试参考题库附带答案详解
- 上海市住宅物业管理规定实施细则
- 2023非水反应型双组分聚氨酯灌浆材料
- 中小学计算机教室学生上机登记表
评论
0/150
提交评论