博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python_面向对象—代码练习
阅读量:5147 次
发布时间:2019-06-13

本文共 9681 字,大约阅读时间需要 32 分钟。

"""注意:代码切勿照搬,错误请留言指出"""

1 import re  2   3 '''  4 class Person:  5     name='xxx'  6     age=20  7   8 p=Person()  #p为实例对象  9 print(p.name,p.age) 10 p.name="yyy" 11 p.gender='male' 12 print(p.name,p.gender,p.age) 13 print(Person.name,Person.age) 14 #p(实例对象)对值得修改不影响Person类中的内容 15 Person.age='30' 16 print(Person.age) 17 #class Person (类) 对值得修改将该影响Person类中的内容 18 ''' 19  20 #访问权限(类的属性) 21 ''' 22 class Person:   #Person中的name和age公有的 23     name = 'james' 24     age=20 25 #在python中规定在前面加两个下划线,就变为私有的 26 ''' 27 ''' 28 class Person: 29     __name = 'james'        #私有的__name 30     age = 20 31  32     def show(self):     #self >> 自己 33         print(self.__name,self.age)     #自己访问自己 正常返回 34  35  36  37 p=Person () 38 p.show()      #需要调用除show()函数,否则会拒绝class中的show的执行 39 print(Person.__name)            # 访问类中的私有属性 异常返回 40 print(p.age) 41 #出现私有的函数调用时,结果同样如此!私有的函数,元素只能在class中被使用 42 #常用的方法就是通过调用公有的函数来执行函数内的私有属性的调用 43 ''' 44  45 #案例:编写个人信息并建立对象访问属性 46 ''' 47 class Person: 48     name = 'xxx' 49     gender = 'x' 50     age = 0 51  52 p=Person() 53 print(p.name,p.gender,p.age) 54 print(Person.name,Person.gender,Person.age) 55  56 p.name = 'A' 57 p.gender = 'Male' 58 p.age = 20 59  60 Person.name = 'B' 61 Person.gender = 'Female' 62 Person.age = 21 63  64 print(p.name,p.gender,p.age)    #p实例对象属性 65 print(Person.name,Person.gender,Person.age) #Person类属性 66 ''' 67  68 #实例方法 69 ''' 70 class Person: 71     age = 20 72     def show(self): 73         print (self.age) 74  75 p.Person() 76 #实例方法至少有一个参数,一般以名为(self)的变量作为该参数(名称可自定义) 77 #实例方法通过实例对象调用,例如:p.show() 78 #如果使用类名称调用,需要人为传递实例参数,例如:Person.show(p) 79 #实例方法被调用是要向他的第一个参数传递实例对象 80 ''' 81 ''' 82 class Person: 83     name = 'james' 84     age = 12 85  86     def getName(self): 87         return self.name 88  89     def getAge(self): 90         return self.age 91  92 p=Person() 93 print(p.getName(),p.getAge())   #实例属性对象调用 94 print(Person.getAge(p)) #类名称调用 95 ''' 96 ''' 97     def show(self,s):   #参数传递 98         print(self,s) 99 100 p.show('hi')    #'hi'值传递给s101 Person.show(p,'hello')  #hello 给 s'''102 103 #类方法104 '''105 class Person:106     age = 20107     @classmethod108     def show(cls):109         print(cls.age)110 111 p=Person()112 '''113 #类方法要使用 @classmethod 来修饰,而且第一个参数一般命名为cls(可另定名)114 #类方法通常使用类的名称调用,例如:Person.show()115 #类方法也可实例方法调用,例如:p.show()116 #类方法调用时会向它的第一个参数传递类的名称117 '''118 class Person:119     __name = 'james'120     __age = 12121 122     @classmethod123     def show(self):124         print(self)125         print(self.__name,self.__age)126 127 Person.show()128 p=Person()129 p.show()'''130 131 #静态方法132 '''133 定义:134 class Person:135     age = 20136     @staticmethod137     def show():138         print(Person.age)139 140 p = Person()141 142 #静态变量函数通过@staticmethod修饰143 #通常采用类的名称或者实例来调用静态方法,例如:Person.show(),p.show()144 #在调用静态函数时不会向函数传递任何参数145 '''146 '''147 class Person:148     __name = 'james'149     __age = 12150 151     @staticmethod152     def show():     #静态不带参数153         print(Person.__name)154 155 p = Person()156 Person.show()157 p.show()158 '''159 160 #类、实例、静态方法 不同——Person161 '''162 class Person:163     name = 'xxx'164     gender = 'x'165     age = 0166                     #实例方法167     def instanceShow(self):168         print(self.name,self.gender,self.age)169 170     @classmethod    #类方法171     def classShow(cls):172         print(cls.name,cls.gender,cls.age)173 174     @staticmethod   #静态方法175     def staticShow():176         print(Person.name,Person.gender,Person.age)177 178 179 p=Person()180 p.instanceShow()        #实例方法调用181 Person.classShow()      #类方法调用182 Person.staticShow()     #静态方法调用183 '''184 '''185 实例方法一般用实例对象调用186 类方法和静态方法一般用类名称调用187 '''188 189 #对象初始化190 '''191 构造方法(函数)...>完成函数初始化192 @ 构造方法__init__(self, ... )在生成对象时调用,193 可以用来进行一些初始化操作,不需要显示去调用,系统默认执行194 如果用户自己没有定义构造方法,系统就自己执行默认的额构造方法195 196 class Person:197     def __init__(self,n,a):198         self.name=n199         aelf.age=a200 201 p=Person('xxx',20)202 print(p.name,p.age)203 204 @ 析构方法__del__(self)在释放对象时调用,可以在里面进行一些释放资源的操作205 不需要显示调用206 207 class Person:208     def __init__(self,n,a):209         self.name = n210         self.age = a211     def __del__(self):212         print('__del__',self.name,self.age)213         214 p=Person('xxx',20)215 print(p.name,p.age)216 ''''''217 class Person:218     def __init__(self):219         print("__init__",self)220     def __del__(self):221         print("__del__",self)222 223 p=Person()'''224 225 #__init__完成对象初始化226 '''227 class Person:228     def __init__(self,n,g,a):       #n,g,a 传参单位229         self.name = n230         self.gender = g231         self.age = a232 233     def show(self):234         print(self.name,self.gender,self.age)235 236 p=Person('james','male',20)     #p对象确定后,p对象的初始化(n,a,m)就完成了237 p.show()238 '''239 #python规定:类中只能有一个构造函数240 #...__init__中设置默认参数241 '''242 class Person:243     def __init__(self,n='',g='male',a=0):244         self.name = n245         self.gender = g246         self.age = a247 248     def show(self):249         print(self.name,self.gender,self.age)250 251 a = Person('james')252 b = Person('james','fenmale')253 c = Person('james','male',20)254 a.show()    #结果:james male 0255 b.show()    #结果:james fenmale 0256 c.show()    #结果:james male 20257 # __init__参数中如果设置了默认值,得到新的内容传参后则覆盖原值'''258 259 #案例:日期类 MyDate260 '''261 class MyDate:262     __months = [0,31,28,31,30,31,30,31,31,30,31,30,31]263     def __init__(self,y,m,d):264         if (y<0):265             print("Error:无效年份")266         if (m<1 or m>12):267             print("Error:无效月份")268         if (y%400 == 0 or y%4 == 0 and y%100!=0):269             MyDate.__months[2] = 29270         else:271             MyDate.__months[2] = 28272 273         if d<1 or d>MyDate.__months[m]:274             print("Error:无效日期")275         #日期,月份,年份均合法后,创建类的属性(内容)276         self.year = y277         self.months = m278         self.day = d279     def show(self,end='\n'):280         print("%d-%d-%d"%(self.year,self.months,self.day),end = end)281 282 p = MyDate(2018,11,19)283 p.show()284 '''285 286 #类的继承287 #派生与继承:Student:name gender age288 '''289 class Person:290     def __init__(self,name,gender,age):291         self.name = name292         self.gender = gender293         self.age = age294 295     def show(self,end='\n'):296         print(self.name,self.gender,self.age)297 298 class Student(Person):299     def __init__(self,name,gender,age,major,dept):300         Person.__init__(self,name,gender,age)301         self.major = major302         self.dept = dept303 304     def show(self):305         Person.show(self,'')306         print(self.major,self.dept)307 308 s = Student('james','male',20,'softwart','computer')309 s.show()310 '''311 '''312 结果:313 james male 20314 softwart computer315 '''316 #继承类构造函数:317 '''318 从上面的Strdent类的定义可以看除派生类的构造函数除了要完成自己的新增加的319 major,dept属性的初始化外,还要调用基类的Person的构造函数,而且还要显示调用320     即: Person.__init__(self,neme,gender,age)321 通过类名称Person直接调用Person的__init__函数,并提供所要的4个函数322 继承类时不会自动调用基类的构造函数的,必须显示调用323 '''324 325 #属性方法的继承:326 '''327 如果一个基类中有一个实例方法,在继承类中也可以重新定义完全一样的实例方法。328 例如 Person有show方法,在Student中也有一样的show方法,它们是不会混淆的329 我们称Student类的show重写了Person的show330 —当然,一个基类的实例方法也可以不被重写,派生类会继承这个基类的实例方法331 -派生类也可以增加自己的新实例方法332 '''333 '''334 class Person:335     className = 'Person'    #自己的实例属性336     def __init__(self,name,gender,age):337         self.name = name338         self.gender = gender339         self.age = age340 341     def show(self,end='\n'):342         print(self.name,self.gender,self.age)343 344     @classmethod        #类方法修饰345     def classClassName(cls):346         print(cls.className)347 348     @staticmethod       #静态方法修饰349     def staticClassName():350         print(Person.className)351 352     def display(self):353         print('display')354 355 class Student(Person):356     #className = 'Student'357     def __init__(self,name,gender,age,major,dept):358         Person.__init__(self,name,gender,age)359         self.major = major360         self.dept = dept361 362     def show(self):363         Person.show(self,'')364         print(self.major,self.dept)365 366 s = Student('A','male',20,'software','computer')367 s.show()368 print(Student.className)    #Student本身没有,则显示上一级(Person)369 Student.classClassName()370 Student.staticClassName()371 372 s.display() #实例调用373 '''374 #结果说明:Student继承了Person的实例、静态、类(属性)方法375 #结果:376 '''377 A male 20378 software computer379 Person380 Person381 Person382 display383 '''384 385 #案例 :年月日 + 时分秒386 387 class MyDate:388     __months = [0,31,28,31,30,31,30,31,31,30,31,30,31]389     def __init__(self,y,m,d):390         if (y<0):391             print("Error:无效年份")392         if (m<1 or m>12):393             print("Error:无效月份")394         if (y%400 == 0 or y%4 == 0 and y%100!=0):395             MyDate.__months[2] = 29396         else:397             MyDate.__months[2] = 28398 399         if d<1 or d>MyDate.__months[m]:400             print("Error:无效日期")401         #日期,月份,年份均合法后,创建类的属性(内容)402         self.year = y403         self.months = m404         self.day = d405     def show(self,end='\n'):406         print("%d-%d-%d"%(self.year,self.months,self.day),end = end)407 408 class MyDateTime(MyDate):409     def __init__(self,y,mo,d,h,mi,s):410         MyDate.__init__(self,y,mo,d)411         if (h<0  or  h>23  or  mi<0  or  mi>59  or  s<0  or  s>59):412             print("Error:无效时间")413         self.hour = h414         self.minute = mi415         self.second = s416 417     def show(self):418         MyDate.show(self,'\t')419         print("%d:%d:%d"%(self.hour,self.minute,self.second))420 421 422 423 424 p = MyDateTime(2018,11,19,21,21,54)425 p.show()426 427 #结果:    2018-11-19  21:21:54

 

转载于:https://www.cnblogs.com/wangyuyang1016/p/10035337.html

你可能感兴趣的文章
Android设置Gmail邮箱
查看>>
js编写时间选择框
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Attributes.Add用途与用法
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>
侧边栏广告和回到顶部
查看>>