1 importre2

3 '''

4 class Person:5 name='xxx'6 age=207

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=2025 #在python中规定在前面加两个下划线,就变为私有的26 '''

27 '''

28 class Person:29 __name = 'james' #私有的__name30 age = 2031

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 = 051

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 = 2059

60 Person.name = 'B'61 Person.gender = 'Female'62 Person.age = 2163

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 = 2072 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 = 1285

86 def getName(self):87 return self.name88

89 def getAge(self):90 return self.age91

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 #类、实例、静态方法 不同——Person

161 '''

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 #案例:日期类 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] = 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 age

288 '''

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 classMyDate: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 =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 classMyDateTime(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 defshow(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

python面向对象代码_python_面向对象—代码练习相关推荐

  1. 线性拟合和梯度下降python代码实现—面向对象(二)

    最近看到了一个系列博客,写的不错,就拿来学习了下.一来加深理解,二来锻炼自己编写代码的能力. 关于基础的理论知识就不重述了,网上资源很多,这里推荐:https://www.zybuluo.com/ha ...

  2. 笔记37 笨办法学python练习43面向对象OOP的游戏代码(二)代码的反复理解

    笔记37 笨办法学python练习43面向对象OOP的游戏代码(二)代码的反复理解 连续贴着这个练习43的代码折腾了整整两天,把那些英文文本翻译为中文文本,重新装进这个代码之中.本想一段一段的运行,发 ...

  3. 红牛农场java代码_Java面向对象程序设计实验指导模板代码(171页)-原创力文档...

    PAGE 1 PAGE 24 Java面向对象程序设计实验指导代码 内容简介 本书是<Java面向对象程序设计>的配套实验指导和习题解答.本书的第一部分为16次上机实践的内容,每次上机实践 ...

  4. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类

    1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...

  5. 面向对象封装放大镜js代码

    面向对象封装放大镜js代码 <!DOCTYPE html> <html lang="en"><head><meta charset=&qu ...

  6. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上_下造型,main方法,抽象类,接口,设计模式,异常,内部类

    1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...

  7. 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符

    11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...

  8. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  9. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

最新文章

  1. 项目开发过程中的收获与思考
  2. webservice 接口练习
  3. 3分钟搞定静态出接口
  4. MEDIATR 一个低调的中介者类库
  5. dismiss的词组_法律英语常用词必记:Dismiss
  6. 可网管交换机的三种管理方式介绍
  7. vue.js 全局应用js_如何在不到7分钟的时间内测试您的Vue.js应用
  8. jackson java网络接口_java~jackson实现接口的反序列化
  9. 面试常考题---交换变量
  10. linux查看进程调用接口,查看某个程序都调用哪些api函数
  11. 产品设计体会(7024)有关交互设计,读过的6本书
  12. 关于银行等带有安全控件插件的输入selenium无法sendkeys的解决方案
  13. python下载特别慢-Python3 用 urllib 下载图片非常慢,会是什么原因呢?
  14. OpenCV+MFC 打开文件并显示在picture控件上
  15. matlab方程组函数画图,MATLAB学习1 之画图函数
  16. c语言入门介绍 Hello, World
  17. Intel(R) Matrix Storage Manager 介绍
  18. 系统映像恢复计算机重启失败,学会使用win10系统的winRE进行系统启动修复、系统还原、系统重置、系统映像恢复等-网络教程与技术 -亦是美网络...
  19. 微软雅黑字体包替换XP的宋体
  20. 你吃的外卖,半年前就做好了

热门文章

  1. Kawasaki 川崎 Z900/Z1000
  2. 函数/方法的局部作用域与for的作用域问题
  3. 程序猿修炼之道-书评
  4. 【Unity3D入门教程】网络通信
  5. 《Android 应用案例开发大全(第3版)》——第2.4节壁纸的实现
  6. 事务一致性性与原子特性理解
  7. 谷粒学院-统一异常处理(全局异常处理、特定异常处理、自定义异常处理)
  8. Nutanix CE版安装
  9. 野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)
  10. 多线程有几种实现方法都是什么?