python面向对象
Posted 枫若雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面向对象相关的知识,希望对你有一定的参考价值。
由面向对象的思想引入面向对象的设计,最后面向对象编程。
#!/usr/bin/env python # coding:utf-8 def school(name,addr,type): def init(name, addr, type): sch = { \'name\': name, \'addr\': addr, \'type\': type, \'kao_shi\': kao_shi, \'zhao_sheng\': zhao_sheng, } return sch def kao_shi(school): print(\'%s 学校正在考试\' %school[\'name\']) def zhao_sheng(school): print(\'%s %s 正在招生\' %(school[\'type\'],school[\'name\'])) return init(name,addr,type) print("面向对象的设计") s1=school(\'oldboy\',\'沙河\',\'私立学校\') print(s1) print(s1[\'name\']) s1[\'zhao_sheng\'](s1) s2=school(\'清华\',\'北京\',\'公立学校\') print(s2) print(s2[\'name\'],s2[\'addr\'],s2[\'type\']) s2[\'zhao_sheng\'](s2)
类的练习二:
#!/usr/bin/env python # coding:utf-8 class Chinese: \'\'\'这里写文档注释\'\'\' area = "Asia" # def init(name,age,gender): # dic={ # \'name\':name, # \'age\':age, # \'gender\':gender # } # return dic def __init__(self, name, age, gender): print("start...") self.aname = name self.aage = age self.agender = gender print("end...") ## 自动return None 所以,不能加return def dun(self): print("%s 亚洲蹲在 %s " % (self.aname,self.area)) def speak(self,lang): print("%s 讲%s " % (self.aname, lang)) p1 = Chinese("Tom",22,"male") # 实例化 print(p1.__dict__) #查看实例的字典 print(p1.aname) print(p1.agender) print(p1.area) p1.dun() p1.speak(\'本地方言\') print(p1.area) # 修改 Chinese.area = \'东方大陆\' # 修改函数 def xia_dun(self): print("%s 坐在了地上。" % self.aname) Chinese.dun = xia_dun # 修改了类的内部函数 # 增加 Chinese.skin = \'yellow\' p2 = Chinese("小明",11,"男") print(p2.area) print(p2.skin) print(p1.skin) # 之前的实例也可以用,因为实例是对类的引用 p2.dun() # 删除 # del Chinese.area # print(p2.area)
类的数据属性和函数属性:(这个说法不同于C# Java PHP)
#!/usr/bin/env python # coding:utf-8 ## 类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念 ## 对象:就是基于类而创建的一个具体的事物(具体存在的)也是特征和动作整合到一起 # class Chinese: # 经典类 python2中的区分 # \'\'\'这是一个中国人的类\'\'\' # pass # # print(Chinese) # # # class Chinese(object): # 新式类 python2中的区分 # pass # 实例化到底干了什么? # p1 = Chinese() # 实例化 并不像其它语言使用new # print(p1) ## python3中不再区分,都是新式类 class Chinese: \'\'\'这里写文档注释\'\'\' # 1 数据属性 area = "Asia" # 2 函数属性 def dun(): print("亚洲蹲") def speak(self): print("讲汉语 %s" % self) print(dir(Chinese)) print(Chinese.__dict__) # 查看类的属性字典,字典里存放着类的数据属性和函数属性 print(Chinese.area) Chinese.dun() # 直接执行类中的函数 Chinese.__dict__[\'dun\']() # 通过字典方式调用类中函数 Chinese.__dict__[\'speak\']("你好") print(Chinese.__name__) # 类名 print(Chinese.__doc__) # 类的文档注释 print(Chinese.__base__) # 基类 <class \'object\'> print(Chinese.__bases__) # 基类 (<class \'object\'>) print(Chinese.__module__) # 来自模块
面向对象应该分清楚实例和类:
#!/usr/bin/env python # coding:utf-8 class Chinese: \'\'\'这里写文档注释\'\'\' country = "China" def __init__(self, name): self.aname = name def speak(self,lang): print("%s 讲%s " % (self.aname, lang)) p1 = Chinese(\'alex\') print(p1.__dict__) # 查看 print(p1.speak) # 只得到实例中函数的内存地址 p1.speak(\'汉语\') # 增加实例中的属性 p1.age = 18 print(p1.__dict__) print(p1.age) ## 不要修改实例的函数属性,虽然可以操作。因为不规范 ## 可以通过__dict__的方式更改字典,但是也不建议这么做,因为不稳定。 # 删除 del p1.age print(p1.__dict__) ## 分清类和实例 p1.country = "zh" print(Chinese.country) # 这是类的 print(p1.country) # 这是实例的
老师http://www.cnblogs.com/linhaifeng/articles/6182264.html
分清类和实例操作的例子:
#!/usr/bin/env python # coding:utf-8 country = "中国" class Chinese: \'\'\'这里写文档注释\'\'\' country = "China" li = [\'a\',\'b\'] def __init__(self,name): self.name = name print(\'-----------------\',country) # 这里的country只相当于普通的变量,跟类没有关系,因为没有通过点来调用 # self.name = input("请输入用户名:") # 不建议在函数中使用输入输出。 混乱,可读性差 def speak(self,lang): print("%s 讲%s " % (self.aname, lang)) p1 = Chinese(\'alex\') print("实例内调用", p1.country) # 点的方式调用是从类的内部 print("类调用", Chinese.country) print(p1.li) # p1.li = [1,2,3] # 实例的list被重新赋值 # print(p1.__dict__) # 返回{\'name\': \'alex\', \'li\': [1, 2, 3]} # print(Chinese.li) # 返回 [\'a\', \'b\'] p1.li.append(\'c\') # 附加了类中列表的元素 print(p1.__dict__) # 实例的字典中没有 li 这个列表 print(Chinese.li) # 类的列表被添加内容
以上是关于python面向对象的主要内容,如果未能解决你的问题,请参考以下文章