首页 > 编程语言 >python基础day31 面向对象

python基础day31 面向对象

时间:2023-06-25 15:57:38浏览次数:40  
标签:__ .__ stu python day31 面向对象 dict Student print

面向过程

在支持面向对象的语言中,都有两大范式:1. 面向过程;2. 面向对象

面向过程:核心就是过程二字,即是先干什么,再干什么,最后干什么,就是机械式的思维方式

举例:
把大象放进冰箱需要几步?
1. 把冰箱门打开
2. 把大象放进去
3. 关上冰箱门
代码案例:实现面向过程的例子
以注册功能为例:
1. 接收用户名和密码
2. 做逻辑处理,验证参数
3. 把数据写入到文件里

面向过程:

优点:负责的问题简单化,进而流程化

缺点:扩展性差,牵一发而动全身

使用场景:多扩展性要求不高的地方,一般使用面向过程

面向对象

面向对象的核心就是“对象”二字

1. 在生活中:

  对象就是特征与机能的结合体

2. 在程序中:

  对象就是盛放数据属性和方法的结合体

  属性:简单理解就是变量

  方法:简单理解就是函数,或者叫功能

优点:扩展性强

缺点:编程复杂度变高了

使用场景:一般用在对扩展性要求较高的地方

类的定义和对象的产生

对象:特征与技能的结合体

站在不同的角度,分类的结果是不一样的

类:就是一系列相似的特征和相似的技能的结合体

问题来了:
到底是先有类还是先有对象?
1. 在生活中:
先有对象,在有类
2. 在程序中:
必须先定义类,然后调用类产生对象 (重要)

# 给学生类定义一个属性和方法出来
class Student():
    # school就是一个属性
    school = 'SH'
    country = 'China'
    # 在类里面定义一个方法出来,本质上就是函数,写在类里面就叫方法
    def choose_course(stu_dict, course)
        stu_dict['course'].append(course):
        print("%s选择了%s成功,%s" % (stu_dict["name"], course, stu_dict["courses"]))

def func(self):
    pass
'''
函数如果不调用,不会调用函数体代码,类呢?
定义类发生的几件事情:
    1. 类一旦被定义,会立马执行类体代码
    2. 类一旦定义完成,会产生类的名称空间,他会把类中的名字都丢到类的名称空间去
    3. 会把类的名称空间绑定给__dict__属性,如何查看:类名.__dict__
'''
# 如何查看类的名称空间?
# print(Student.__dict__)


# 如何产生对象?
# 在程序中,必须先定义类,然后调用类产生对象,
# 如何调用类?
# 类名()

stu = Student()  # 这就是在调用类, 得到的结果就是一个对象
stu1 = Student()
print(stu)  # <__main__.Student object at 0x000001B27B31F220>

# 2. 对象也有它自己的名称空间
# 怎么查看对象的名称空间? 跟类是一样的,stu.__dict__
print(stu.__dict__)  # {} 调用类产生对象,得到的是一个空对象,其实就是空字典
print(stu1.__dict__)

"""每调用一次类,都会产生一个对象,并且产生的对象之间是相互独立的,互补影响的"""
# 调用类的过程也是实例化的过程,得到的结果就是一个实例

定制对象自己独有的属性

class Student():
    # school就是一个属性
    school = 'SH'  # 属性就是变量

    # __init__这个函数名不能改名字,必须叫这个名字,一点都不能差
    def __init__(stu_obj, name, age, gender, salary):
        stu_obj.name = name  # stu.__dict__['name'] = 'kevin'
        stu_obj.age = age  # stu.__dict__['age'] = '18'
        stu_obj.gender = gender  # stu.__dict__['gender'] = 'male'
        stu_obj.salary = salary  # stu.__dict__['salary'] = '1800'

    # 在类里面定义一个方法出来,为什么叫方法了嫩?本质上就是函数,写在类里面就叫方法
    def choose_course(stu_dict, course, ):
        stu_dict["courses"].append(course)
        print("%s选择了%s成功,%s" % (stu_dict["name"], course, stu_dict["courses"]))

# 怎么得到一个对象
"""
    调用类会自动的触发类里面的__init__方法,然后会把得到的对象本身当成第一个参数自动传递
"""

# stu['choose_course'](stu, 'linux')
stu = Student('kevin', 18, 'male', 2800)  # stu = Student(stu, 'kevin', 18, 'male', 2800)
stu1 = Student('jason', 28, 'male', 3800)
# stu2 = Student()

"""__dict__开头的属性或者方法都有他自己的特殊含义,一般不建议使用"""

print(stu.__dict__)

名称空间的查找顺序(重点)

属性的查找顺序分两大类:
类属性:在类里面定义的属性就是类属性
对象属性:就是对象自己独有的属性

# 类属性
# 增删改查
# 查看
print(Student.school)

# 增加
Student.x = 'a'
Student.y = 'b'

# 改
Student.x = 10

# 删除
del Student.school
print(Student.__dict__)


# 对象属性
print(stu.__dict__)

# 查看
print(stu.__dict__['name'])
print(stu.__dict__['age'])
print(stu.__dict__['gender'])

print(stu.name)
print(stu.age)
print(stu.gender)
# stu.school = 10
print(stu.__dict__)
"""这是个特殊的:对象属性的查找顺序是:先在自己对象的名称空间中查找,如果找不到再去产生这个对象的类中取找,如果找不到,就报错"""
print(stu.school)  # SH

# 增加
stu.x = 1

# 改
stu.x = 10

# 删除
del stu.school
print(stu.__dict__)

 

标签:__,.__,stu,python,day31,面向对象,dict,Student,print
From: https://www.cnblogs.com/zfq132/p/17503091.html

相关文章

  • 【python基础】文件-文件路径
    1.文件路径我们发现不管是写入还是写出操作,我们提供的都是文件名,其实这里准确说应该是文件路径。当我们简单把文件名传递给open函数时,Python将在当前执行程序的文件所在的目录中查找文件名所代表的文件。根据组织文件的方式,可能需要打开不在当前执行程序文件所属目录中的文件。......
  • Python爬虫高并发爬取数据
    高效爬虫可以在较短的时间内获取更多的数据,提高数据的采集速度。这对于需要大量数据支撑的数据分析、机器学习、人工智能等任务非常重要。高效爬虫可以获取更多的原始数据,并允许更精准的数据清洗和处理。这样可以提高数据的质量和关联性,使得后续的分析和挖掘工作更加准确和有价值。......
  • 类和面向对象编程
    一、两大范式支持面向对象的语言中,都有两大范式面向过程和面向对象1、面向过程:流程化、步骤化思维优点:复杂的问题简单化,进而流程化缺点:扩展性差,牵一发而动全身使用场景:对扩展性要求不高的地方,一般使用面向过程2、面向对象对象就是盛放数据"属性"和"方法"的结合体属性:简......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-4-playwright等待浅析
    1.简介在介绍selenium的时候,宏哥也介绍过等待,是因为在某些元素出现后,才可以进行操作。有时候我们自己忘记添加等待时间后,查了半天代码确定就是没有问题,奇怪的就是获取不到元素。然后搞了好久,或者经过别人的提示才恍然大悟没有添加等待时间。而playwright为了避免我们犯这么low的......
  • 面试Python开发的这道题超简单,我却搞砸了!
    题图 | Shutterstock/studiostoks这道算法题明明超简单……上午10点,在T公司的会议室里,小R正在参加一场他准备了好几天的技术面试。整体来说,他在这场面试中的表现还不错。无论坐在小R对面的面试官提出什么问题,他都能侃侃而谈、对答如流。从单体应用聊到微服务,从虚拟机聊到云计算......
  • 数学竟然可以这样学,用Python魔法突破数学结界!
    今年的高考刚刚过去,在数学考完的当天,“高考数学”又一次荣登微博热搜榜榜首。对于这场数学考试,可谓几家欢喜几家愁,图灵君浏览着微博上读者的留言深有感触。(选自微博账号@四川校园君)对于部分参加高考的同学来说,这场数学考试可能意味着他们与数学的缘分到此为止;然而,对于更多的小伙伴......
  • python操作rabbitmq
     rabbitmq安装部署   RabbitMq生产者消费者模型生产者(producter) 队列消息的产生者,复制生产消息,并将消息传入队列生产者代码:importpikaimportjsoncredentials=pika.PlainCredentials('admin','admin')#mq用户名和密码,用于认证#虚拟队列需要指定参数vir......
  • Python爬虫之数据解析技术
    Python爬虫需要数据解析的原因是,爬取到的网页内容通常是包含大量标签和结构的HTML或XML文档。这些文档中包含所需数据的信息,但是需要通过解析才能提取出来,以便后续的处理和分析。以下是一些使用数据解析的原因:数据提取:网页内容通常包含大量的无关信息和嵌套结构,数据解析可以帮助我......
  • 日系明解系列又添新成员!日本编程教育界泰斗手把手教你入门 Python
    如今,会用Python的人越来越多,Python 不仅被众多企业所采用,在教学一线也有越来越多的人将Python指定为必学编程语言。为什么 Python会受到如此重视?首先这门编程语言擅长的领域非常多,不仅包括机器学习、深度学习等人工智能(AI)领域,还包括数据分析、科学计算、Web应用程序和GUI(G......
  • 手把手教你用Python构建自己的「王二狗」
    导读在人手N部智能手机的时代,我们对聊天机器人早已不陌生。这两年很火的游戏群聊天机器人「王二狗」更是用它的机智幽默征服了很多人。今天,我们将手把手教你用Python从头开始创建一个聊天机器人,这种机器人能够理解用户的话,并给出适当的回应。闲话不多说,让我们开始从头开始做出自己......