自我总结18

面向对象介绍,类的介绍

一门编程思想

面向过程编程:

核心是“过程”二字,过程值得是做事情的步骤,即先教什么再做什么

基于该编程思想编写程序,就好比一条工厂流水线,一种机械式的思维方式。

优点:逻辑清晰,复杂的问题流程化,进而简单化

缺点:可扩展性差
面向对象编程:

核心是“对象”二字,对象指的是特征与技能的结合体

基于该编程思想编写程序,就好比在创造世界,一种上帝式的思维方式。

优点:    可扩展性高。

缺点:    编写程序的复杂程度要远高于面向过程编程思想。

优先使用面向过程还是面向对象?

面向过程结合面向对象一起使用

'''
类:
	对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体
	
如何定义类
	首定义类,后调用类创造对象
	
定义类语法
	def 函数名()
	
	class 类名:
		对象相同的特征
		对象相同的技能
		
	class:用来定义类的,class后跟的是类名
	类名:类的名字,用来调用创造对象的
	
	注意: 类名必须要遵循驼峰命名法,python在定义变量与函数时不推荐使用,但在定义类时推荐使用。

    在定义类发生的事情:
        1.类在定义时,会产生一个空的名称空间。
        2.会把类内部所有名字,扔进类的名称空间中。
        注意: 类在定义阶段就已经产生好了名称空间,执行python文件时会执行类内部的代码。


学生类:
    相同特征 --> 类内部的变量
        school

    相同技能 --> 类内部的函数
        learn
        choose_course
				
'''

对象

'''
如何产生对象:
    语法:
        类名 + () 调用类产生对象。

名称空间的产生:
    1.类的名称空间在类定义阶段就已经产生了。
    2.对象的名称空间,在调用类时产生。
'''

对象与类的查找顺序

'''
对象与类的查找顺序:
    1.对象.属性,若对象本身有,则优先查找对象自己的。
    2.若对象本身没有,则去类里面找,若类没有,则报错。
'''

对象绑定方法的特殊之处

'''
类内部的函数主要是给对象用的:
    1.由类来调用类内部的函数,该函数只是一个普通的函数,
    普通函数需要接收几个参数就得传入几个参数。

    2.由对象来调用称之为对象的绑定方法,
    不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中.

    *******对象的绑定方法,是由对象来调用的,
        特殊之处就是把对象当作第一个参数传入该方法中.
'''

一切皆对象

'''
int,float,str,list,tuple,dict,set,bool
在python中一切皆对象.
'''

# 定义一个列表
list1 = [1, 2, 3]  # list([1, 2, 3])
print(list1)  # [1, 2, 3]
print(id(list1))  # 2738050243464
print(type(list1))  # <class 'list'>

f = float()
s1 = str()
l = list()
t = tuple()
d = dict()
s2 = set()
b = bool()

print(type(f))
print(type(s1))
print(type(l))
print(type(t))
print(type(d))
print(type(s2))
print(type(b))

案例:人狗大作战

'''
需求:
    人对象
    狗对象
    人狗互咬,直到一方生命值为0,则程序结束.

定义两个类:
    人类
    狗类
'''


# 在现实世界中
'''
对象人1:
    特征:
        name = '高冯冯'
        aggr = 100
        life = 500
    
    技能:
         咬狗
         def bite()
对象人2:
    特征:
        name = '小丁丁'
        aggr = 200
        life = 1000
    
    技能:
         咬狗
         def bite()
         
    相同特征:
        
    相同技能:
        bite
         
         
对象狗1:
    特征:
        name = 'nick'
        dog_type = '哈士奇'
        aggr = 200
        life = 300
    
    技能:
        咬人
        bite
        
对象狗2:
    特征:
        name = 'jason'
        dog_type = '泰日天'
        aggr = 500
        life = 100
    
    技能:
        咬人
        bite    
        
        
    相同特征:
    相同技能:
        bite
'''

class People:
    def __init__(self, name, aggr, life):
        # 对象特有的特征
        self.name = name
        self.aggr = aggr
        self.life = life

    # 人咬狗方法
    def bite(self, dog):
        if dog.life <= 0:
            return True

        if self.life:
            # 狗掉血
            dog.life -= self.aggr
            print(
                f'''
                人: [{self.name}]开始咬狗:[{dog.name}]
                狗掉血: [{self.aggr}] 
                狗还剩血量: [{dog.life}]
                ''')


class Dog:
    def __init__(self, name, dog_type, aggr, life):
        self.name = name
        self.dog_type = dog_type
        self.aggr = aggr
        self.life = life

    # 狗咬人方法
    def bite(self, people):
        if people.life <= 0:
            return True

        if self.life:
            # 人掉血
            people.life -= self.aggr

            print(
                f'''
                狗: [{self.name}]开始咬人:[{people.name}]
                人掉血: [{self.aggr}] 
                人还剩血量: [{people.life}]
                ''')


p1 = People('egon', 200, 1000)
d1 = Dog('nick', '哈士奇', 500, 400)

while True:

    flag1 = p1.bite(d1)

    # print(flag1)
    if flag1:
        break

    flag2 = d1.bite(p1)
    if flag2:
        break
posted @ 2019-10-09 21:08  jzm1201  阅读(93)  评论(0编辑  收藏  举报