zoukankan      html  css  js  c++  java
  • 小学生绞尽脑汁也学不会的python(初识面对对象)

    小学生绞尽脑汁也学不会的python(初识面对对象)

    一. 面向对象思想
    1. 面向过程. 重点在"过程". 按照实物的发展流程. 先干嘛,后干嘛, 最后干嘛....
    优点: 简单. 流水线式的工作
    缺点: 可扩展性差.
    2. 面向对象. 什么是对象? 对象是属性和动作的集合体. 对象是一个抽象的概念.
    重点在"对象" : 属性和动作.类似上帝式的思维

    优点: 可扩展性强(多态)
    缺点: 编写相对比较复杂. 上手比较难.

    面向对象和面向过程各有千秋. 各有各的好.
    二. 面向对象如何编写
    在代码中定义一个类,就相当于画图纸
    class 类名:
    pass
    创建对象: 类名()
    1. 构造方法:
    def __init__(self, 属性):
    self.属性 = 属性
    2. 普通方法
    def 方法名(self, 参数列表):
    pass
    self: 表示当前类的对象. 当前正在执行这个动作的对象.
    对象.方法()
    类名.方法(对象, 参数)

    # 定义一辆车
    class Car:
        # 出厂设置.(__init__) 构造方法
        def __init__(self, color, pai, pailiang, own): # self 表示当前类的对象
            # print("我在造车")
            # print(self)
            # 绑定属性.
            self.color = color
            self.pai = pai
            self.pailiang = pailiang
            self.own = own
    
        # 车能跑. 跑是一个动作. 要写函数(方法)
        def run(self):  # self: 当前类的对象
            print("%s颜色的车在疯狂的跑" % self.color)  # self就是你当前正在执行这个动作的对象.
            print(self)
    
        def tiaogao(self):
            print("有一台%s色的车在疯狂跳高" %  self.color)
    
    c1 = Car("红", "京A66666", "2.0T", "alex") # 自动的调用__init__函数(方法)
    c1.run() # 对象.方法()
    c1.tiaogao()
    print(c1)
    # print(c1.__dict__)
    # c1.color = "绿色"
    # 字典.
    # print(c1.color)
    c2 = Car("黑色", "京B22222", "1.5L", "小猪佩奇") # 没有参数
    c2.run()
    print(c2)
    # print(c2.color) # ????
    
    
    
    
    
    
    # # 创造一辆车
    # c = Car()  # 类名()
    #
    # c.color = "黑色"  # 对象.属性
    # c.pai = "京A66666"
    # c.pailiang = "2.0t"
    # c.own = "alex"
    # print(c.pai)
    #
    # c1 = Car()  # 创建新对象. 又叫做实例化  # 类是一个概念. 对象:具体的实例
    # c1.color = "白色"
    # c1.pai = "京B22222"
    # c1.pailiang = "1.6T"
    # c1.own = "小猪佩奇"
    # print(id(c), id(c1))
    # print(c1.pai)
    # print(c.own)
    
    # print(type(c))
    

      

    三. 面向对象和面向过程的对比(代码, 思想).
    结论: 根据不同的业务逻辑, 来决定用那种思想.

    # 装大象, 脚本
    # print("打开冰箱门")
    # print("装大象")
    # print("关上冰箱门")
    
    # 函数式编程
    # def kaimen():
    #     print("打开冰箱门")
    # def zhuangdaxiang():
    #     print("装大象")
    # def guanmen():
    #     print("关门")
    # kaimen()
    # zhuangdaxiang()
    # guanmen()
    
    
    # 面向对象
    # class Elphant:
    #
    #     def open(self):
    #         print("大象会开门")
    #     def zhuang(self):
    #         print("把自己装进去")
    #     def close(self):
    #         print("把门关上")
    #
    # # 创建大象
    # e = Elphant()
    # e.open()
    # e.zhuang()
    # e.close()
    
    # 第一回合. 面向过程赢
    
    
    # 第二回合. 小猪佩奇(name, age, 技能)大战奥特曼, 蜘蛛侠, 蝙蝠侠
    # 函数式
    # def da_ao_te_man(name, age, jineng):
    #     print("%s, %s岁了, 用技能%s 打奥特曼" % (name, age, jineng))
    # def da_zhi_zhu_xia(name, age, jineng):
    #     print("%s, %s岁了, 用技能%s 打蜘蛛侠" % (name, age, jineng))
    # def da_bian_fu_xia(name, age, jineng):
    #     print("%s, %s岁了, 用技能%s 打蝙蝠侠" % (name, age, jineng))
    #
    # da_ao_te_man("小猪佩奇", 40, "嘴巴嘟嘟")
    # da_zhi_zhu_xia("小猪佩奇", 40, "嘴巴嘟嘟")
    # da_bian_fu_xia("小猪佩奇", 40, "嘴巴嘟嘟")
    
    
    # 面向对象
    # class Pig:
    #
    #     def __init__(self, name, age, jineng):
    #         self.name = name
    #         self.age = age
    #         self.jineng = jineng
    #
    #     def da_ao_te_man(self):
    #         print("%s, %s岁了, 用技能%s 打奥特曼" % (self.name, self.age, self.jineng))
    #     def da_zhi_zhu_xia(self):
    #         print("%s, %s岁了, 用技能%s 打蜘蛛侠" % (self.name, self.age, self.jineng))
    #     def da_bian_fu_xia(self):
    #         print("%s, %s岁了, 用技能%s 打蝙蝠侠" % (self.name, self.age, self.jineng))
    #
    # peiqi = Pig("小猪佩奇", 40, "嘴巴嘟嘟") # 把这三个属性封装到了一个对象里.
    # peiqi.da_ao_te_man()
    # peiqi.da_zhi_zhu_xia()
    # peiqi.da_bian_fu_xia()
    
    
    # 平手. 当属性和方法非常多的时候, 才能感觉到面向对象的好.
    # 你要知道. 面向对象和面向过程都是思想. 用哪一个取决于业务逻辑.
    

      

    # class Foo:
    #     def play(self):
    #         print("Foo中的play")
    #     def func(self):
    #         print("我是爹")
    #
    # class Foo2:
    #     def money(self):
    #         print("干爹给钱")
    #
    #     def play(self):
    #         print("Foo2中的play")
    #
    # class Bar(Foo, Foo2): # 继承   子类,  MRO算法. C3算法
    #     pass
    #
    # obj = Bar()
    # # obj.money()
    # # obj.func()
    # obj.play()
    
    # class Pet:
    #     def __init__(self, name):
    #         self.name = name
    #
    #     def chi(self):
    #         print("吃,.....")
    #     def sleep(self):
    #         print("睡")
    #
    # class Cat(Pet):
    #     def catchMouse(self):
    #         print("%s喜欢抓老鼠" %  self.name)
    #
    # class Dog(Pet):
    #     def chaijia(self):
    #         print("狗会拆家")
    #
    # class Snake(Pet): # 蛇是一种宠物, x是一种y的时候. x继承y
    #     pass
    # c = Cat("佩奇")
    # c.chi()
    # c.sleep()
    # c.catchMouse()
    
    
    # class Car:
    #     def run(self):
    #         print("车会跑")
    #
    #
    # class BMWCar(Car):
    #     pass
    
    
    # class Animal:
    #     def dong(self):
    #         pass
    #
    # class Cat(Animal):
    #     def catchMaouse(self):
    #         pass
    #
    #
    # # 变量 = 类名()
    # c = Cat() # 猫类型的
    # c.catchMaouse()
    # c.dong()
    #
    # c = "alex"
    # python本来就是多态. 里面没有所谓的类型.
    
    # class Animal:
    #     def chi(self):
    #         print("所有的动物都会吃")
    #
    # class Haski(Animal):
    #     def chi(self):
    #         print("疯了一样的吃")
    #
    # class Monkey(Animal):
    #     def chi(self):
    #         print("龇牙咧嘴的吃")
    #
    # class Tiger(Animal):
    #     def chi(self):
    #         print("跟猫一样的吃")
    #
    # class Elphant(Animal):
    #     def chi(self):
    #         print("大象用鼻子卷着吃")
    #
    # class YingWu(Animal):
    #     def chi(self):
    #         print("xxxxx")
    #
    #
    # class SiYangYuan:
    #     def wei(self, ani):  # 多态性. 超强的可扩展性. 不论传递进来的是什么. 都统一当成动物来对待.
    #         ani.chi()
    #
    # syy = SiYangYuan()
    #
    # # 造动物
    # hou = Monkey()
    # ha = Haski()
    # lao = Tiger()
    # yw = YingWu()
    #
    # syy.wei(ha)
    # syy.wei(hou)
    # syy.wei(lao)
    # syy.wei(yw)
    
    
    class Car:
        def run(self, speed):
            print("车能跑%s迈" % speed)
    
    c = Car() # 实例化一个对象
    # Car.run(c, 50)
    c.run(50)
    

      

    四. 面向对象的三个特征(记下来).
    1. 封装: 把具有相同属性和功能的内容封装在一个对象中
    2. 继承: 子类可以自动拥有父类中除了私有属性外的其他所有内容
    3. 多态: 同一个对象. 可以拥有多种形态. python原生自带多态性

    特效练习题:

    一.补充代码实现:

    user_list = []
    while True:
            user = input(“请输入用户名:”)
            pwd = input(“请输入密码:”)
            email = input(“请输入邮箱:”)

    1. while循环提示用户输入:用户名、密码、邮箱
    2. 为每个用户创建一个对象,并添加到列表中。

    3.当列表中的添加了3个对象后,跳出循环并以此循环打印所有用户的姓名和邮箱。如:

    class User:
    # def __init__(self, username, password, email):
    # self.username = username
    # self.password = password
    # self.email = email
    #
    #
    # user_list = []
    # for i in range(3):
    # user = input("请输入用户名:")
    # pwd = input("请输入密码:")
    # email = input("请输入邮箱:")
    # u = User(user, pwd, email)
    # user_list.append(u)
    # else:
    # for u in user_list:
    # print("我叫%s, 邮箱是:%s" % (u.username, u.email))
    #
    

      

    二.补充代码:实现用户注册和登录

    class User:
        def __init__(self, name, pwd):
            self.name = name
            self.pwd = pwd
    
    class Account:
        def __init__(self):
            self.user_list = [] # 数据源
    
    
        def login(self):
            print("欢迎来到登录环节")
            username = input("请输入用户名: ")
            password = input("请输入密码:")
            for u in self.user_list:
                if u.name == username and u.pwd == password:
                    print("登录成功")
                    return
            else:
                print("登录失败")
    
        def register(self):
            print("欢迎来到注册环节")
            uname = input("请输入用户名")
            pwd = input("请输入密码")
    
            u = User(uname, pwd)
            self.user_list.append(u)
    
    
        def run(self):
            while 1:
                print("1. 注册")
                print("2. 登录")
                num = input("请输入你要执行的操作(Q退出):")
                if num == "1":
                    self.register()
                elif num == "2":
                    self.login()
                elif num.upper() == "Q":
                    print("退出")
                    break
                else:
                    print("你是不是傻")
    
    obj = Account()
    obj.run()
    

      

  • 相关阅读:
    数据库数据闪回设置
    Ajax
    Spring Framework & Spring Boot
    Maven与Ant比较
    Spring中控制反转(IoC)/依赖注入(DI)的区别
    C# 图片加水印、截取图片、压缩图片等。有个坑,往下看。当图片为jpg格式时,发现出来的图片结果异常的大
    json 递归
    Webservice 问题:system.argumentexception:找不到xxx定义。缺少命名空间为xxx的服务说明
    利用.net 自带的工具生成webservice服务(windows)
    sqlserver 查询 今天明天后天等数据
  • 原文地址:https://www.cnblogs.com/konghui/p/9707836.html
Copyright © 2011-2022 走看看