前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象基础

面向对象基础

作者头像
星哥玩云
发布2022-09-08 12:27:58
2300
发布2022-09-08 12:27:58
举报
文章被收录于专栏:开源部署

一、面向对象思想简介

  • 软件编程就是将我们的思维转变成计算机能够识别语言的一个过程
  • 什么是面向过程? 自上而下顺序执行,逐步求精 其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构; 各模块之间的关系尽可能简单,在功能上相对独立 每一模块内部均是由顺序、选择和循环三种基本结构组成 其模块化实现的具体方法是使用子程序 程序流程在写程序时就已决定
  • 什么是面向对象? 把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象 对同类对象抽象出其共性,形成类 类中的大多数数据,只能用本类的方法进行处理 类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信 程序流程由用户在使用中决定
  • 理解面向对象
    • 面向对象是相对面向过程而言
    • 面向对象和面向过程都是一种思想
    • 面向过程 强调的是功能行为 关注的是解决问题需要哪些步骤
    • 面向对象 将功能封装进对象,强调具备了功能的对象 关注的是解决问题需要哪些对象
    • 面向对象是基于面向过程的
  • 把🐘关冰箱 面向过程

面向对象:更加符合人民思考习惯的思想,从执行者变成了指挥者

  • 面向对象的特点 是一种符合人们思考习惯的思想 可以将复杂的事情简单化 将程序员从执行者转换成了指挥者
  • 完成需求时 a、先要去找具有所需的功能的对象来用 b、如果该对象不存在,那么创建一个具有所需功能的对象
  • 类与对象的关系 使用计算机语言就是不断的在描述现实生活中的事物 Python中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义 对象即是该类事物实实在在存在的个体
  • 面向对象的4大特性 封装、继承、多态、抽象

二、第一个Python类

设计类只关心3样东西

说明

类名:首字母大写,遵守标识符规则 属性:遵守标识符规则 行为(功能、方法、函数):遵守标识符规则

设计类

代码语言:javascript
复制
类名:Person
属性:name age sex height weight
行为:搬砖、盖房子

创建类

格式

代码语言:javascript
复制
class 类名(父类名):
    属性&行为

说明

class:表明这是一个类

类名:类的名字

():父类集合的开始和结束 父类名:父类的名字,定义的类继承自父类,可以不写,默认是object。object是所有类的直接或间接父类

代码

代码语言:javascript
复制
class Person(object):
    pass

三、使用类实例化对象

代码语言:javascript
复制
# 类
class Person(object):
    pass

格式

对象名 = 类名(参数列表)

说明

参数列表:为了后面给属性进行赋值的

实例化代码

代码语言:javascript
复制
per1 = Person()
print(per1)
per2 = Person()
print(per2)

四、访问对象的方法

对象方法

定义:如Person类中

调用方式:通过实例对象调用

调用格式:对象名.方法名(参数列表)

特性:在对象方法内部可以引用类内部的任何属性和方法 注意:定义对象方法的第一个参数必须是self,其余参数按顺序排列,调用对象方法(函数)时忽略self self:代表一个对象,哪个对象调用的对象方法,那么在该方法中self就代表哪个对象

类方法

定义:如Person类中

调用方式:用类名调用(也可以使用对象调用,但是很少这么用)

调用格式:类名.方法名(参数列表)

特性:在类方法内部可以引用类的属性和方法 注意:定义对象方法的第一个参数必须是cls,其余参数按顺序排列,调用类方法(函数)时忽略cls cls:代表当前对象的类的类名

静态方法

定义:如Person类中

调用方式:类和实例对象均可调用

调用格式:类名/对象名.方法名(参数列表)

特性:无论用类调用还是用实例对象调用,都无法获取到内部的属性和方法,完全独立的一个方法 作用:常用作工具方法

代码

代码语言:javascript
复制
class Person(object):
    # 定义对象方法
    def run(self):
        print("----------------run", self)
        #对象方法内部调用其他对象方法
        self.eat("banana")
        # 对象方法内部调用其他类方法
        self.talk("nice")
    def eat(self, food):
        print("----------------eat", food)

    # 定义类方法
    @classmethod
    def say(cls):
        print("----------------say", cls)
        # 在类方法内部调用其他类方法
        cls.talk("handsome")
    @classmethod
    def talk(cls, word):
        print("----------------talk", word)

    # 定义静态方法
    @staticmethod
    def play():
        print("----------------play")



# 实例化一个对象
per = Person()
print(per)
print(Person)

# 调用对象方法
per.run()
per.eat("apple")
# Person.run() #报错
# Person.run(per) #类调用对象方法,需要传递一个对象,实参对象会给对象方法中的self赋值。注意帅的人基本不这么用

# 调用类方法
Person.say()
Person.talk("good")
# per.say() #使用实例对象调用了类方法,最好不要这么用

print("-------------------------------")
per.run()
Person.say()

print("-------------------------------")
per.play()
Person.play()

五、类属性

定义

代码语言:javascript
复制
class Person(object):
    # 定义类属性
    # 当多个类的对象的属性值需要相同时可以使用类属性
    name = "lilei"
    age = 18
    sex = "男"

调用

可以通过类调用,也可以通过对象调用

使用

代码语言:javascript
复制
# 实例化对象时,每一个对象的属性值都相同
per1 = Person()
per2 = Person()

#通过对象方法类属性   对象名.类属性名
print(per1.name, per1.age, per1.sex)
print(per2.name, per2.age, per2.sex)

# 修改对象属性值,如果对象属性不存在则变为增加对象属性
per1.name = "liudh"
per2.name = "daol"
print(per1.name, per2.name, Person.name)

问题

使用类创建的所有对象的属性初始值都是一样的

六、对象的初始化状态

需求

类创建的多个对象的属性的初始值是不同的

定义

代码语言:javascript
复制
class Person(object):
    # 类属性
    country = "中国"

    # 构造方法:在使用类创建实例对象时自动调用,目的是初始化对象的内容
    def __init__(self, name, age, sex):
        # 定义对象属性
        # 只能对象调用
        self.name = name
        self.age = age
        self.sex = sex

使用

代码语言:javascript
复制
# 创建对象时给每个对象的属性进行赋值
per1 = Person("daol", 45, "男")
per2 = Person("liudh", 55, "男")

print(per1.name)
print(per2.name)

# print(Person.name) # 类中没有name属性,且类无法调用对象属性

__new__方法

说明:是一个类方法,在使用类实例化对象时,在__init__之前调用,在堆内存中开辟空间,并返回空间的首地址,该片内存空间就代表创建的对象(混沌对象)

使用:以后是使用__new__实现单例类,否则基本不会使用

七、析构函数

作用

释放一些不必要的内存

使用

代码语言:javascript
复制
class Person(object):
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __del__(self):
        print("-----del-----")

调用:在释放对象时自动调用

代码语言:javascript
复制
per = Person("liudh", 55, "男")
# 释放对象
del per
print(per)

# num = 10
# #释放掉后面的内容
# del num
# print(num) 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、面向对象思想简介
  • 二、第一个Python类
  • 三、使用类实例化对象
  • 四、访问对象的方法
  • 五、类属性
  • 六、对象的初始化状态
  • 七、析构函数
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档