面 向 对 象

1 篇文章 0 订阅
1 篇文章 0 订阅

面向过程

面向过程:
    不是一门技术,是一种编程思想
    核心是过程两字,过程就是先做什么,在做什么,最后做什么,机械思维
    
    优点:
        复杂的问题简单化,流程化
    缺点:
        扩展性差,可维护性差
        
    应用场景:对扩展性要求不高的地方



def choose_course(stu_dic,course):
    stu_dic['courses'].append(course)
    print("%s 选课成功 %s" % (stu_dic['name'], stu_dic['courses']))

stu1 = {
    'name':'egon',
    'age' : 18,
    'gender' : 'male',
    'courses': [],
    'choose_course':choose_course
}

stu2 = {
    'name':'tom',
    'age' : 18,
    'gender' : 'male',
    'courses': [],
    'choose_course':choose_course
}

面向对象

核心是对象二字
类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间
    1 程序里面
        对象就是盛放数据属性和功能的容器,
    2 现实中
        对象就是特征与技能的结合体
    linux:一切皆文件
优点:扩展性强
缺点:编程复杂度高
应用场景:对扩展性要求较高的场景,比如:qq
​
对象:特征和节能的结合体

类:一系列对象相似的特征和相似的技能的结合体   
    强调:在不同的角度,划分的类是不一样的
​
问题:先有类还是先有对象?
    1 程序中:
        必须先定义类,在调用类的产生的对象
    2,现实生活中
        先有对象 再有类
​
类定义阶段发生了什么事?
    1,立即执行类的体代码
    2,产生了类的名称空间,把类;里面定义的名字都扔到字典里
    3,把类的名称空间绑定给类名 类名.__dict__
    
    
调用类的过程就是实例化, 得到的对象就是一个实例
    
class Student():
    school = 'SH'
​
    def choose_course(stu_dic, course):
        stu_dic['courses'].append(course)
        print("%s 选课成功 %s" % (stu_dic['name'], stu_dic['courses']))
​
    print(123)
# 类的名称空间
print(Student.__dict__)
#
#
# # 造对象,调用类,产生对象
stu1 = Student()  # 调用类 产生空对象
# stu2 = Student()
#
print(stu1.__dict__)



格式语法
#定义类
​
class 类名():
    pass
def 函数名():
    pass
​
类名:一般是首字母大写
​
​
#造对象,调用类,产生对象

属性查找

class Student():
    school = 'SH'
    # 初始化方法
    def __init__(stu_obj, name, age, gender, courses=[]):
        stu_obj.name = name  # stu1.__dict__['name'] = 'egon'
        stu_obj.age = age  # stu1.__dict__['age'] = 20
        stu_obj.gender = gender  # stu1.__dict__['gender'] = 'male'
        stu_obj.courses = courses  # stu1.__dict__['courses'] = []

    def choose_course(self, course):
        self.courses.append(course)
        print("%s 选课成功 %s" % (self.name, self.courses))


    # print(123)


# 类的名称空间
# print(Student.__dict__)
stu1 = Student('egon', 18 ,'male')
stu2 = Student('tom', 18 ,'male')

# 对象操作属性  点语法取值,先从自己对象中取,如果没有,在去类中取值

# print(stu1.school)
#
# stu1.xxx = 'x'
# del  stu1.xxx
# stu1.school = 'y'

# Student.school = 'x'
# print(stu1.school)

# 类中的属性是共享给所有对象的,是共享给所有对象用的,指向相同的内存地址;但是,类中的方法是给对象用的, 并且,把对象自己当成第一个参数传递

# stu1.school = 'y'
# print(stu1.school)
#
# print(stu2.school)
stu1.choose_course('python')

小练习

"""
定义个学生类,产生一堆对象


要求:
    增加一个计数器,记录产生了多少个对象?
"""

"""
定义两个英雄类,

要求:
    1. 英雄要有昵称,生命值, 攻击力
    
    2. 产生两个对象
    
    3. 互相攻击,生命值小于0,判定为死亡

"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值