专栏首页python3day 16 初试面试对象

day 16 初试面试对象

1.初识面向对象

     面向过程:

            一切以事物的发展流程为中心

     面向对象:

            一切以对象为中心.一切皆为对象.具体的某一个事务就是对象

打比方:

      大象进冰箱

            步骤:第一步:开门, 第二步:装大象,第三:关门

             面向对象:  大象,进冰箱 ,  此时主语是大象,我操纵的是大象,此时的大象就是对象

2.类,对象

类: 就是图纸.  创建对象的第一步.先画图纸.先写类.

对象:  通过类创建对象, 列如:对象就是车,通过图纸造出来的东西

类与对象的关系:

  类是对xxx事务的归类.

          写:

              __init__(self,参数)   参数一般作为属性设置给对象.对象就是self,对徐行的封装.

             def 方法(self,参数):  方法. 第一个参数一般是固定的self.当前类的对象.

                     pass

             对象是xx类型的一个具体

                     创建对象: 类名()

  创建类:

class 类名:

             def __init__(self):   ##初始化方法.又被称为构造方法

                   self.属性  = 值

                   self.属性  = 值

                   self.属性  = 值

             def  fangfa(self):

                      方法体(函数体, return)

创建对象:

          变量 = 类型()     ###实例化   <->创建对象

          变量.属性    #访问对象的属性信息

          变量.方法()   ##访问类中的方法

1. 创建⼀个武松. 武松可以打老虎, 杀嫂⼦, 替天⾏道

类就是对属性和方法的封装

class Person:

    # 属性

    def __init__(self, waihao, name, address):

        self.waihao = waihao

        self.name = name

        self.addre

ss = address

    # 动作

    def dalaohu(self):

        print('%s%s%s打老虎' % (self.waihao, self.name, self.address))

    def shasaozi(self):

        print("这个人, 喜欢啥嫂子")

    def titianxingdao(self):

        print("替天行道")

ws = Person("行者", "武松", "景阳县")

ws.dalaohu()

ws.shasaozi()

ws.titianxingdao()

⽤⾯向对象的思维来完成⽤户登录.

# 用户登录的问题. 逻辑是活的

#

# 我的版本: 把所有的逻辑都写在类中

class User:

    def __init__(self, username, password):

        self.username = username

        self.password = password

    def login(self):

        uname = input("请输入你的用户名")

        upwd = input("请输入你的密码")

        if uname == self.username and upwd == self.password:

            print("登录成功")

        else:

            print("登录失败")

u = User("alex", "123")

u.login()

3.面向对象和面向过程的对比:

   如果细一些比较小的程序用面向过程

   程序很复杂,很庞大建议用面向对象

# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 超人

# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蝙蝠侠

# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蜘蛛侠

# 面向过程: 代码非常的冗余. 尤其是参数

def fight_superman(name, jineng):

    print("%s使用%s攻击超人" % (name, jineng))

def fight_batman(name, jineng):

    print("%s使用%s攻击蝙蝠侠" % (name, jineng))

def fight_spiderman(name, jineng):

    print("%s使用%s攻击蜘蛛侠" % (name, jineng))

fight_superman('小猪佩奇', "嘴巴嘟嘟")

fight_batman('小猪佩奇', "嘴巴嘟嘟")

fight_spiderman('小猪佩奇', "嘴巴嘟嘟")

#面向对象

class Pig:

    def __init__(self, name, jineng):

        self.name = name

        self.jineng = jineng

    def fight_superman(self):

        print("%s使用%s攻击超人" % (self.name, self.jineng))

    def fight_batman(self):

        print("%s使用%s攻击蝙蝠侠" % (self.name, self.jineng))

    def fight_spiderman(self):

        print("%s使用%s攻击蜘蛛侠" % (self.name, self.jineng))

pg = Pig("小猪佩奇", "嘴巴嘟嘟")

# 不需要向原来一样传递一样的参数了

# 面向对象的程序: 结果相对清晰. 缺点: 代码量比原来大, 上手太难

pg.fight_batman()

pg.fight_spiderman()

pg.fight_superman()

4.面向对象的三大特征:  封装, 继承,多态

   封装:   1.对属性的封装(__init__),    2.对方法和功能的封装

   继承:  子类自动拥有父类中除了私有内容外的其他所有内容

                   class Bar(fool):    Bar对fool进行了扩展

                             pass

              当出现x是一种y的时候.    推荐使用继承关系

             python支持多继承.   查找顺序: 先找理他近的

# 当出现xxx是一种yyy类型的东西. 可以使用继承关系

# 猫是一种动物

class Animal:

    def dong(self):

        print("动物会动, 顾雍")

class Cat(Animal): # 子类其实是对父类的一种扩展

    def catchMouse(self):

        print("猫很皮, 抓老鼠")

c = Cat()

c.dong()

c.catchMouse()

# python支持多继承

class Foo1:

    def getMoney(self):

        print('给你个大嘴巴子')

    def play(self):

        print("玩儿")

class Foo2:

    def getMoney(self):

        print('给多点儿')

class Bar(Foo1, Foo2): # 离当前类最近的是亲爹, 后面的是干爹.

    pass

b = Bar()  # 就近原则, MRO的C3算法

多态(python原生直接就是多态)

             python更多的之臣的是鸭子模型,只要会嘎嘎叫就是好鸭子

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 长连接 mysql数据库

    python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能

    py3study
  • Python写的俄罗斯方块

    简单瞅了下Tkinter,和Canvas配合在一起,还算是简洁的界面开发API。threading.Thread创建新的线程,其多线程机制也算是方便。

    py3study
  • 【python 验证码】产生中文验证码

    py3study
  • Python Turtle帮助文档梳理

    Python Turtle帮助文档真的很多,几十屏拉不到头。其中很多部分是重复的。近期进行了梳理,我将其分为全局控制、画布设置、画笔设置、画笔操作、互动等五个部...

    一石匠人
  • 用python解析xml的几种方法

    4.开始部分:<?xml version="1.0" encoding="utf-8"?>

    py3study
  • PyQt5 非模态对话框(apply 型)

    如果希望用户可以重复更改对话框中的参数并能马上看到修改结果,那么就要使用非模态对话框,这样用户就可以按照他们喜欢的方式来持续不断地修改数据并验证修改的结果了。

    用户6021899
  • 用 Python 写个坦克大战

    坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,...

    纯洁的微笑
  • PyQt5 多文档窗口界面

    本篇介绍多文档窗口界面的写法。代码中并未实现关闭窗口前文档未保存的提醒对话框,因为之前已有介绍。

    用户6021899
  • Data Structures and Algorithms Basics(007):Stack-Queue

    用户5473628
  • html5点击出现燃放烟花特效

    今天我发现了一个非常好的html特效,是由HTML5来实现的,效果非常绚丽。效果如下:

    无邪Z

扫码关注云+社区

领取腾讯云代金券