• 第18课 面向对象


    面向对象

    一、面向对象的设计和实现

    1、定义和实现:对象可以直接对应现实世界的事物

    2、面向对象的设计:OOD----Object Oriented Design

      1)分析要解决的问题(现实世界的)

      2)定义出各种对象----代表现实世界的对象

      3)通过设计对象之间的关系和交互行为来设计系统

    3、面向对象的设计与面向对象的语言

      1)面向对象的设计:是一种设计思路

      2)面向对象的语言:提供面向对象设计的语言支持

      3)面向对象的语言能实现面向对象的设计思路

    二、类和实例

    1、对象的定义:类的实例化体现(如小王是人类中的具体某个人),包含属性(静态的,如身高、体重)和行为(动态的,如吃饭、睡觉)-----实际存在的个体

    2、类的定义:具有共同属性和行为的事物的集合,如人类、鸟类、汽车类----抽象的

    3、定义了类,就定义了对象类型(包括在系统里面的属性和行为)。类的属性和行为         

    三、静态属性和实例属性

    1、静态属性(类属性)-----整个类所共有的属性

      如:老虎这个名称(该类所有实例共享的属性)

    2、实例属性----每个实例所特有的属性

      1)举例:老虎的体重(每个老虎独有的属性)

      2)定义在初始化方法__init__里

      3)self的概念

                                                                                       

    四、知识点汇总

     1、游戏分解:

      1)老虎-----类

        1--特征:

          1--长相

          2--体重 *

          3-长度

        2--行为:

          1--进食(吃肉)*

          2--叫  *

          3--睡

          4--跑

      2)羊------类

        1--特征:

          1--长相

          2--体重  *

          3--长度

        2--行为:

          1--进食(吃草)*

          2--叫  *

          3--睡

          4--跑

       3)房间-------类

        1--特征:

          1--房间号

          2--房间里的动物

    2、随机操作

      1)from random import randint

        randint(0, 2)-----取值:0、1、2

    3、计时操作:

      1)import time

        print(time.time())  单位  s  从1970年开始算起

      2)如果是打日志log,要换成北京时间。格式:xx-xxx-xxx

      3)只是单纯的计时,不需要换算。

    4、编程思路

      1)定义一个类:

        1--class 类名(首字母大写----规范)

        2--class Tiger:

       2)类的实例化:

        t1 = Tiger()-------t1就是老虎类的一个实例

       3)类里面的变量-----属性

       4)类里面的函数-----方法

       5)静态属性==类属性

        1、这个属性属于整个类---所有实例化对象都是一样的

       6)实例化属性:

        1、这个属性---属于某一个实例----每一个实例都会不一样

        2、def __init__(self):-----初始化方法==构造方法

        3、只要创造了实例,都会去调用初始化方法

        4、在创建实例的时候,就赋予了该实例的一些实例属性 def __init__(self, weight)

          1-self-----t1、t2------实例对象本身

        5、self:只是代言词,不是关键字------可以用其他字符代替。但是,不要去代替(规范)。

           7)  方法:1-函数  2-行为

        1、实例方法:每个具体实例相关的方法。

           (1)初始化方法就是一个实例方法

           (2)

        2)静态方法:共有的方法,与每个具体实例无关-------类方法

          1、@staticmethod   修饰---只能修饰紧跟的一个

         8)对象的组合

         9)继承

          1、class SouTiger(Tiger):    # 华南虎-----继承自父类Tiger

          2、可以多继承

          3、子类初始化方法里面,需要调用父类的初始化方法

           class DoTiger(Tiger):

            DoName = '东北虎'

            def __init__(self,  weight):

              Tiger.__init__(self,  weight)

              10)方法的重写

           1、super(SouTiger, s1).roar()   # 调用父类的方法

           super(子类名,  子类实例).父类的方法()      # 调用父类的方法

    class Tiger:  # 老虎类
        typeName = 'tiger' # 属性
        def __init__(self, weight):
            self.weight = weight
    
            print('我是初始化方法')
    
    
        # 实例方法
        def roal(self):
            print('wow!')
            self.weight -= 5
    
        def feed(self, food):
            if food == '':
                self.weight += 10
                print('喂食正确!')
            else:
                self.weight -= 10
                print('喂食错误!')
            print( )
    
    
        # 静态方法 ==== 类方法
        @staticmethod
        def tell():
            print('我是类方法')
    
    
    
    class Sheep:  # 羊类
        typeName = 'sheep'
    
        def feed(self, food):
            if food == '':
                print('喂食正确!')
            else:
                print('喂食错误!')
    
    
    
    
    
    class Room:  # 房间类
        typeName = 'room'
        def __init__(self, num, animal):
            self.num = num
            self.animal = animal
    
    
    
    
    
    
    #  类的实例化
    t1 = Tiger(100)  # 创造实例t1
    print(t1.weight)
    t1.roal()
    print('叫后的体重:', t1.weight)
    t1.feed('')
    
    r1 = Room(1, Tiger(500))
    print(r1.animal.weight)
    r1.animal.feed('')
    
    
    
    from random import randint
    one = randint(0, 1)
    if one == 1:
        ani = Tiger(100)
    else:
        ani = Sheep()
    
    
    import time
    
    
    
    
    
    #  9-1 继承
    class SouTiger(Tiger, Sheep):  # 华南虎  多重继承:可以继承多个父类的方法。顺序,优先继承名字在前面的类
        souName = '华南地区'
    
        def __init__(self, weight):
            Tiger.__init__(self, weight)
    
        def roar(self):
            print('我是子类的roar!')
    
    
    
    s1 = SouTiger(160)
    print(s1.typeName)
    print(s1.souName)
    s1.roar()
    super(SouTiger, s1).roar()  # 调用父类的方法
    
    
    
    
    
    
    t2 = Tiger(160)  # 创造实例 t2
    print(t2.weight)
    t3 = Tiger(180)  # 创造实例
    print(t1.typeName)
    print(t2.typeName)
    print(Tiger.typeName)
    
    t4 = Sheep()
    t4.feed('')
    p
  • 相关阅读:
    【docker】win10安装docker教程
    【大数据】hive 删除临时文件 .hive-staging_hive
    【PostgreSql】生成数据字典
    【python3】基于scrapyd + scrapydweb 的可视化部署
    【python3】将视频转换为代码视频
    博客转移,永久退出博客园
    对dataframe中某一列进行计数
    解决mac上matplotlib中文无法显示问题
    在Jupyter notebook中使用特定虚拟环境中的python的kernel
    ubuntu18.04里更新系统源和pip源
  • 原文地址:https://www.cnblogs.com/nick1998/p/10508141.html
Copyright © 2020-2023  润新知