zoukankan      html  css  js  c++  java
  • python_面向对象—代码练习

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

      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'值传递给s
    101 Person.show(p,'hello')  #hello 给 s'''
    102 
    103 #类方法
    104 '''
    105 class Person:
    106     age = 20
    107     @classmethod
    108     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 = 12
    121 
    122     @classmethod
    123     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 = 20
    136     @staticmethod
    137     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 = 12
    150 
    151     @staticmethod
    152     def show():     #静态不带参数
    153         print(Person.__name)
    154 
    155 p = Person()
    156 Person.show()
    157 p.show()
    158 '''
    159 
    160 #类、实例、静态方法 不同——Person
    161 '''
    162 class Person:
    163     name = 'xxx'
    164     gender = 'x'
    165     age = 0
    166                     #实例方法
    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=n
    199         aelf.age=a
    200 
    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 = n
    210         self.age = a
    211     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 = n
    230         self.gender = g
    231         self.age = a
    232 
    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 = n
    245         self.gender = g
    246         self.age = a
    247 
    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 0
    255 b.show()    #结果:james fenmale 0
    256 c.show()    #结果:james male 20
    257 # __init__参数中如果设置了默认值,得到新的内容传参后则覆盖原值'''
    258 
    259 #案例:日期类 MyDate
    260 '''
    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] = 29
    270         else:
    271             MyDate.__months[2] = 28
    272 
    273         if d<1 or d>MyDate.__months[m]:
    274             print("Error:无效日期")
    275         #日期,月份,年份均合法后,创建类的属性(内容)
    276         self.year = y
    277         self.months = m
    278         self.day = d
    279     def show(self,end='
    '):
    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 age
    288 '''
    289 class Person:
    290     def __init__(self,name,gender,age):
    291         self.name = name
    292         self.gender = gender
    293         self.age = age
    294 
    295     def show(self,end='
    '):
    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 = major
    302         self.dept = dept
    303 
    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 20
    314 softwart computer
    315 '''
    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的show
    330 —当然,一个基类的实例方法也可以不被重写,派生类会继承这个基类的实例方法
    331 -派生类也可以增加自己的新实例方法
    332 '''
    333 '''
    334 class Person:
    335     className = 'Person'    #自己的实例属性
    336     def __init__(self,name,gender,age):
    337         self.name = name
    338         self.gender = gender
    339         self.age = age
    340 
    341     def show(self,end='
    '):
    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 = major
    360         self.dept = dept
    361 
    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 20
    378 software computer
    379 Person
    380 Person
    381 Person
    382 display
    383 '''
    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] = 29
    396         else:
    397             MyDate.__months[2] = 28
    398 
    399         if d<1 or d>MyDate.__months[m]:
    400             print("Error:无效日期")
    401         #日期,月份,年份均合法后,创建类的属性(内容)
    402         self.year = y
    403         self.months = m
    404         self.day = d
    405     def show(self,end='
    '):
    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 = h
    414         self.minute = mi
    415         self.second = s
    416 
    417     def show(self):
    418         MyDate.show(self,'	')
    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
  • 相关阅读:
    Android存储数据方式(转)
    Android实现双进程守护 (转)
    Android DOM、SAX、Pull解析XML(转)
    TCP/IP和Socket的关系(转)
    Socket通信原理和实践
    [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)
    内存堆和栈的区别
    hdu 1754 线段树
    hdu 1166 线段树
    zoj 3686 线段树
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/10035337.html
Copyright © 2011-2022 走看看