第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
原文地址:https://www.cnblogs.com/nick1998/p/10508141.html