好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

第一阶段:Python开发基础 day23 面向对对象的程序设计(一)

目录

一、面向对象编程介绍 一、面向过程编程 二、面向对象编程 二、类和对象 二、现实世界中定义类和对象 三、程序中定义类和对象 三、绑定方法 四、一切皆对象 五、小练习 今日总结

一、面向对象编程介绍

一、面向过程编程

面向过程变成的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么然后干什么……

基于面向过程编程的思想编写程序好比在设计一条流水线,是一种机械式的思维方式。

优点:复杂的问题流程化、进而简单化 缺点:扩展性差

二、面向对象编程

面向对象编程的核心是对象二字,对象是特征与技能的结合体。

基于面向对象编程的思想编写程序,就好比是在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式。

优点:可扩展性强 缺点:编程的复杂度要高于面向过程

二、类和对象

一、类和对象

类的意思:种类、分类、类别

对象是特征与技能的结合体,我可能有身高体重、而你也有身高体重,所以你会说你像我,但是你一定不会说你像阿猫阿狗。并且我和你其实就可以说成是一类,而你和选课系统不能说是一类,因此给出类的定义:类就是一系列对象相似的特征与技能的结合体。

在现实世界中:先有一个个具体存在的对象,然后随着人类文明的发展才了分类的概念,既然现实世界中有类这个概念,Python程序中也一定有类这个概念,但是在Python程序中:必须先定义类,然后调用类来产生对象。

二、现实世界中定义类和对象

就拿未来我们的选课系统来讲,我们先总结一套现实世界中的学生对象:

对象1: 特征: 学校=‘oldboy‘ 姓名=‘耗哥‘ 年龄=18 性别=‘male‘ 技能: 选课 对象2: 特征: 学校=‘oldboy‘ 姓名=‘猪哥‘ 年龄=17 性别=‘male‘ 技能: 选课 对象3: 特征: 学校=‘oldboy‘ 姓名=‘帅翔‘ 年龄=19 性别=‘female‘ 技能: 选课

2.2 定义对象

站在未来选课系统的角度,我们还可以总结现实世界中的学生类:

老男孩学生类: 相似的特征: 学校=‘oldboy‘ 相似的技能 选课

三、程序中定义类和对象

3.1 定义对象
# 注意类中定义变量使用驼峰体
class OldboyStudent():
    school = 'oldboy'

    def choose_course(self):
        print('is choosing course')
曾经定义函数,函数只检测语法,不执行代码,但是定义类的时候,类体代码会在类定义阶段就立刻执行,并且会产生一个类的名称空间,也就是说类的本身其实就是一个容器/名称空间,是用来存放名字的,这是类的用途之一

print(OldboyStudent.__dict__)

{‘ module ‘: ‘ main ‘, ‘school‘: ‘oldboy‘, ‘choose_course‘: <function OldboyStudent.choose_course at 0x10d653ae8>, ‘ dict ‘: <attribute ‘ dict ‘ of ‘OldboyStudent‘ objects>, ‘ weakref ‘: <attribute ‘ weakref ‘ of ‘OldboyStudent‘ objects>, ‘ doc ‘: None}

print(OldboyStudent.__dict__['school'])

oldboy

print(OldboyStudent.__dict__['choose_course'])

<function OldboyStudent.choose_course at 0x10d653ae8>

try:
    OldboyStudent.__dict__['choose_course']()
except Exception as e:
    print('error:', e)

error: choose_course() missing 1 required positional argument: ‘self‘

print(OldboyStudent.school)

oldboy

OldboyStudent.choose_course(111)

is choosing course

print(OldboyStudent.choose_course)

<function OldboyStudent.choose_course at 0x10d653ae8>

OldboyStudent.__dict__['choose_course']

<function main .OldboyStudent.choose_course(self)>

OldboyStudent.country='China'
OldboyStudent.__dict__['country']
'China'
OldboyStudent.country='CHINA'
OldboyStudent.__dict__['country']

‘CHINA‘

del OldboyStudent.school
print(OldboyStudent.__dict__)

{‘ module ‘: ‘ main ‘, ‘school‘: ‘oldboy‘, ‘choose_course‘: <function OldboyStudent.choose_course at 0x10d653ae8>, ‘ dict ‘: <attribute ‘ dict ‘ of ‘OldboyStudent‘ objects>, ‘ weakref ‘: <attribute ‘ weakref ‘ of ‘OldboyStudent‘ objects>, ‘ doc ‘: None, ‘country‘: ‘CHINA‘}

3.2 定义对象 调用类即可产生对象,调用类的过程,又称为类的实例化,实例化的结果称为类的对象/实例

stu1=OldboyStudent() # 调用类会得到一个返回值,该返回值就是类的一个具体存在的对象/实例
print(stu1.school)

oldboy

stu2=OldboyStudent() # 调用类会得到一个返回值,该返回值就是类的一个具体存在的对象/实例
print(stu2.school)

oldboy

stu3=OldboyStudent() # 调用类会得到一个返回值,该返回值就是类的一个具体存在的对象/实例
stu3.choose_course()

is choosing course

三、绑定方法

定义在类内部的方法:

如果类来调用:就是一个普通函数,有几个参数就需要传几个参数 对象来调用:它叫对象的绑定方法,第一个参数不需要传,自动传递

示例:

class Student:
    #变量表示属性
    school='oldboy'
    #__init__ 看好名字,不是__int__
    def __init__(x,name):
        x.name=name
    def choose(self):
        print("选课....")
    def study(self):
        print('%s学会了python'%self.name)

stu1=Student('nick')
stu1.study()
stu1=Student('李铁蛋')
stu1.study()

四、一切皆对象

python中,字典、列表字符串···都是对象

类即类型

lis = [1,2,3]

类实例化产生对象

ll=list([1,2,3]) l2=list([5,7,8])

类即类型

list.append(ll,9)
print(ll)

print(type(ll))

class Student:
    #变量表示属性
    school='oldboy'
    def choose(self):
        print("选课....")
    def study(self):
        print('学习')
a=Student()
print(type(a))

五、小练习

#人狗大战
#定义一个狗类
class Dog:
    type_dog='藏獒'
    def __init__(self,name,aggressivity,hp=100):
        self.name=name
        self.aggressivity=aggressivity
        self.hp=hp
    def bite(self,target):
        #当期狗的攻击力:self.aggressivity
        #人的血量:target.hp
        target.hp-=self.aggressivity
        print('''
        狗的品种:%s
        %s狗咬了一下%s人,
        人掉血:%s
        人的血量剩余:%s
        '''%(self.type_dog,self.name,target.name,self.aggressivity,target.hp))
#人类
class Human:
    def __init__(self,name,aggressivity,hp=100):
        self.name=name
        self.aggressivity=aggressivity
        self.hp=hp
    def bite(self,target):
        target.hp-=self.aggressivity
        print('''
        %s人咬了一下%s狗,
        狗掉血:%s
        狗的血量剩余:%s
        '''%(self.name,target.name,self.aggressivity,target.hp))


#实例化产生狗对象
# dog1=Dog('旺财',10)
dog1=Dog('旺旺财',10,200)
nick=Human('nick',50)
dog1.bite(nick)
print(nick.hp)
dog1.bite(nick)
print(nick.hp)
nick.bite(dog1)

今日总结

查看更多关于第一阶段:Python开发基础 day23 面向对对象的程序设计(一)的详细内容...

  阅读:26次