day15-2018-11-6 初识面向对象
# # class表示创建一个类 # # Car 类名. 类是对事物的定义. 归类 # class Car: # pass # # c = Car() # 把类概念进行实例化. 通过类来创建对象 # # # 对象 = 类() # # c.lunzi = "圆的" # 属性 # c.color = "骚红色" # c.pailiang = "6.3T" # c.paizhao = "京A66666" # # . 的 # print(c.pailiang) # print(c.color) # print(c.paizhao) # print(c.lunzi) # # # 对象.属性 # c.suoyouren = "周杰伦" # print(c.suoyouren) # # print(c.price) # AttributeError: 'Car' object has no attribute 'price' # # # c2 = Car() # print(c2.color) # 类名首字母大写. class Computer: # 构造方法. 在创建的对象的时候由系统自动访问这个方法 # self: 自己. 自身. 类的对象. 当前正在创建的对象 def __init__(self, pinpai, price, cpu, neicun): # 谁在调用, self就是谁, self 由python自动传递 self.pinpai = pinpai self.price = price self.cpu = cpu self.neicun = neicun # 方法. 该类型的对象能够执行哪些操作 def dayouxi(self, game): # 谁调用的这个方法. self就是谁 # 我用我的self.pinpai的调用. 利用很牛B的self.cpu来完成吃鸡操作 print("我要打游戏, 我要%s" % game) c = Computer("微软",25000,"i9","5T") # 创建对象 c.dayouxi("吃鸡") # c2 = Computer("mac book", 22000, "i7", "16G") # print(c2.price) # c.pinpai = "神州" # c.price = 100 # c.cpu = "赛扬双核" # c.neicun = "1G" # # c2 = Computer() # c2.pinpai = "小米" # c2.price = 10000 # c2.cpu = "I7-8750" # c2.neicun = "1T" # # print(c2.pinpai) # 小米 # print(c.pinpai) # 神州 # 思考过程: # 准备创建类 -> 定义__init__() self.xxx = xxxx # 对象能干什么事儿? 方法. def 方法名(self, 参数...) # 练习题: # 1. 创建⼀个武松. 武松可以打老虎, 杀嫂⼦, 替天⾏道 # class HaoHan: # def __init__(self, waihao, name, wuqi, jineng): # self.waihao = waihao # self.name = name # self.wuqi = wuqi # self.jineng = jineng # # def dalaohu(self): # pass # # def shasaozi(self): # pass # # def titianxingdao(self): # pass # # ws = HaoHan("行者", "武松", "拳头", "王八拳") # ws.dalaohu() # ws.shasaozi() # ws.titianxingdao() # # lk = HaoHan("黑旋风", "李逵", "双板斧", "旋风斩") # lk.dalaohu() # lk.shasaozi() # lk.titianxingdao() # 2. ⽤⾯向对象的思维来模拟LOL⾥的盖伦(英雄)上阵杀敌. # class Tank: # def __init__(self, name, waihao, hp, fy): # self.name = name # self.waihao = waihao # self.hp = hp # self.fy = fy # # def kang(self): # pass # # def zhengyishenpan(self): # pass # # gailun = Tank("盖伦","德玛西亚之力", 5000, 200) # 3. 编写和尚类. ⾃⼰⾃由发挥和尚有哪些属性和⽅法. # class HeShang: # def __init__(self, fahao, simiao): # self.fahao = fahao # self.simiao = simiao # # def nianjing(self): # pass # # def marray(self): # pass # 因果报应 -> 做好事儿. 向善 # 4. ⽤⾯向对象的思维来完成⽤户登录. class User: def __init__(self, username, password): self.username = username self.password = password def login(self, uname, upws): if uname == self.username and upws == self.password: return True else: return False # u1 = User("alex", "123") ret = u1.login(input("请输入你的用户名"), input("请输入密码")) print(ret)
# 要把大象装冰箱 # def open(): # print("开门") # def zhuang(): # print("装大象") # def close(): # print("关门") # # open() # zhuang() # close() # class DaXiang: # def open(self): # print("开门") # def jinbingxiang(self): # print('进冰箱') # def guanmen(self): # print("关门") # # dx = DaXiang() # dx.open() # dx.jinbingxiang() # dx.guanmen() # 主语发生了改变 # 函数式编程. 简单的基本功能还是函数式编程更加好用 # 面向对象: 如果功能非常复杂的时候. # # alex大战奥特曼 # def daZhanAoTeMan(name, wuqi, jineng): # print("%s 使用 %s 配合 %s技能狂怼奥特曼" % (name, wuqi, jineng)) # # alex大战哥斯拉 # def daZhanGeSiLa(name, wuqi, jineng): # print("%s 使用 %s 配合 %s技能狂怼哥斯拉" % (name, wuqi, jineng)) # # alex大战蝙蝠侠 # def daZhanBianFuXia(name, wuqi, jineng): # print("%s 使用 %s 配合 %s技能狂怼蝙蝠侠" % (name, wuqi, jineng)) # # daZhanAoTeMan("alex", "菜刀", "动感光波") # daZhanGeSiLa("alex", "菜刀", "动感光波") # daZhanBianFuXia("alex", "菜刀", "动感光波") # class Person: # def __init__(self, name, wuqi, jineng, taopaoluxian): # # 封装: 对属性的封装. # self.name = name # self.wuqi = wuqi # self.jineng = jineng # self.taopaoluxian = taopaoluxian # # # # 对方法进行封装 # def daZhanAoTeMan(self): # print("%s 使用 %s 配合 %s技能狂怼奥特曼" % (self.name, self.wuqi, self.jineng)) # # # alex大战哥斯拉 # def daZhanGeSiLa(self): # print("%s 使用 %s 配合 %s技能狂怼哥斯拉" % (self.name, self.wuqi, self.jineng)) # # # alex大战蝙蝠侠 # def daZhanBianFuXia(self): # print("%s 使用 %s 配合 %s技能狂怼蝙蝠侠" % (self.name, self.wuqi, self.jineng)) # # a1 = Person("alex", "菜刀", "动感光波", "打车跑") # a1.daZhanAoTeMan() # a1.daZhanBianFuXia() # a1.daZhanGeSiLa() # 面向对象比面向过程复杂 # 封装: # # class User: # def __init__(self, username, password): # self.username = username # self.password = password # # def login(self): # pass # def regist(self): # pass # def update_psw(self): # pass # db_package # dbutil class DBUtil: def __init__(self, ip, username, password): self.ip = ip self.username = username self.password = password # 对功能的封装 def test_connect(self): pass def connect(self): pass def add(self): pass def upd(self): pass def remove(self): pass def sel(self): pass # 文件读取 工具类 # excel doc txt 视频 图片 class FileUtil: def __init__(self, path): self.path = path self.f = open(path, mode="rb") def excel_read(self): self.f.seek(0) for line in self.f: pass def doc_read(self): pass def img_read(self): pass def movie_read(self): pass
# 继承: 子类自动拥有父类中除了私有内容外的其他所有内容 # 现在我们写的内容没有私有的 # class Niu: # def da(self): # print("牛魔王打架很厉害") # # class HongHaiEer(Niu): # def da(self): # print("喷火") # # hhl = HongHaiEer() # hhl.da() # class Animal: # def chi(self): # print("喜欢吃东西") # # # 当程序中出现了 x是一种y. x可以继承y # class Cat(Animal): # pass # class Foo: # def a(self): # pass # # def b(self): # pass # # class Bar(Foo): # 子类在父类的基础上扩展了一些功能. 派生 # def c(self): # pass # # b = Bar() # b.a() # b.b() # b.c() # class DBUtil: # # def __init__(self, ip, username, password): # pass # def test_connect(self): # pass # def connect(self): # pass # def close(self): # pass # # class Mysql_Util(DBUtil): # # def add(self): # pass # def delete(self): # pass # def update(self): # pass # # class Oracle_Util(DBUtil): # # def add(self): # pass # def delete(self): # pass # def update(self): # pass
# 同一个对象. 拥有多种形态 java c++ # class Aniaml: # def dong(self): # print("动物可以动") # # # class Cat(Aniaml): # def chi(self): # print("猫喜欢吃鱼") # # a = Cat() # a.chi() # 站在猫的角度. 可以吃 # a.dong() # 站在动物的角度可以动 # 在python中多态的效果感受不够明确 class YaoGuai: def teng(self): print("妖怪一定会疼") class ZhiZhuJing(YaoGuai): def teng(self): print("蜘蛛精很痛") class HeiXiongJing(YaoGuai): def teng(self): print("黑熊精也很疼") class BaiGuJing(YaoGuai): def teng(self): print("白骨精骨头很疼") class JinJiaoDaWang(YaoGuai): def fangundeteng(self): print("爆炸的疼") class SunWuKong: def da(self, yg): yg.teng() # 只要包含了xxx功能的内容都可以试用. 鸭子模型 -> 多态性 # 西游记开始 swk = SunWuKong() hxj = HeiXiongJing() swk.da(hxj) bgj = BaiGuJing() swk.da(bgj) zzj = ZhiZhuJing() swk.da(zzj) alex = JinJiaoDaWang() swk.da(alex)
class Foo1: def money(self): print("有钱") class Foo2: def play(self): print("玩儿") def money(self): print("没钱") class Bar(Foo2, Foo1): # MRO c3算法 pass b = Bar() b.money()