Python进阶 -- 面向对象 基础

简介: Python进阶 -- 面向对象 基础

一、面向对象

编程的方式:

  • 面向过程
  • 把一件事情拆分成步骤
  • 面向对象
  • 把一件事情提炼成一类
  • 类又可以实例化出对象
  • 面向对象的特点:
  • 封装
  • 继承
  • 多态
 
面向对象写代码先考虑有哪些类
注意:
1.类名 大驼峰命名法(每个单词的首字母大写)
2.新式类和旧式类(3.xxx默认都是新式类)
     在Python2.xxx的时候 类名(object)新式类 如果不加就是旧式类
     在Python3.xxx的时候 新式类
3.写类的时候
    行为
    属性
4.先写类 再创建对象(实例对象)
class Dog:
    def run(self):
        dog_name = input('请输入狗狗的名字:')
        print(f"{dog_name}会跑!")
 
 
# 类进行封装的好处
xiao_bai = Dog()
xiao_hei = Dog()
# 对象的使用
xiao_bai.run()
xiao_hei.run()

二、类和对象

1、在类的外部给实例对象添加属性-self的含义讲解

"""
self存储的是实例对象的地址 即 调用者的内存地址
1.方法中具有self的方法 我们称之为实例方法
2.如果属性具有self 我们称之为实例属性
变量存的是地址 一切变量皆可引用
"""
 
 
class Dog:
    def run(self):
        print("🐕会跑!")
 
    def get_name(self):
        print(self.name)
 
 
# 给对象添加属性
xiao_bai = Dog()
# 类的外部添加属性
xiao_bai.name = '小白'
 
# 对象的使用
xiao_bai.run()
print(xiao_bai.name)
 
# 2类的内部获取实例属性
xiao_bai.get_name()
 
# 对象默认有一个属性 _class_
print(xiao_bai.__class__)
print(Dog)

 

2、在类的内部给实例对象添加属性

def run():
    print('🐕会跑')
 
 
class Dog:
    def __init__(self):
        self.name = None
 
    def set_name(self, name):
        self.name = name
 
    def get_name(self):
        print(self.name)
 
 
xiao_bai = Dog()
# 在类的内部给实例对象添加属性
xiao_bai.set_name("小白")
xiao_bai.get_name()

3、相关概念

类:


存储的是公共的属性和方法


对象:


存储自己独有的一些属性


给实例对象添加实例属性


类的外部添加


对象名.属性名 = 数据


类的内部添加


通个调用一个实例方法


self.属性名 = 数据


实例属性最终存储的地方都是实例对象所在的空间

三、__init__( )方法

"""
__int__():初始化方法,在我们使用类创建对象的时候默认会进行数据的初始化
1.init在我们创建对象的时候 会自动调用(不需要我们手动调用)
"""
class Dog:
    def __init__(self,name):
        self.kind = '犬类'
        self.name = name
 
xiaobai = Dog("小白")
xiaohei = Dog('小黑')
#实例对象获取实例属性的方式
print(xiaobai.kind)
print(xiaohei.kind)
print(xiaobai.name)
print(xiaohei.name)

四、__str__方法

# 1. __str__ 用来描述对象信息的
# 2. __str__ 应该有一个return 并且返回的是一个字符串
# 3. 字符串就是对象的描述信息
# 4. 调用时机: print(对象) 自动调用__str__方法
 
 
# 1. 创建一个英雄类Hero
class Hero:
    # 2. 通过Hero创建的对象都应该具有 HP 和 ATK 这两个属性(int类型的)
    def __init__(self, HP, ATK, name):
        self.HP = HP
        self.ATK = ATK
        self.name = name
 
    def atk(self, enemy_hero):
        if self.ATK > enemy_hero.ATK:
            print(f"{self.name}打败了{enemy_hero.name}")
        else:
            self.HP = self.HP - enemy_hero.ATK
            print(f"{self.name}打不过{enemy_hero.name},当前血量:{self.HP}")
 
    def __str__(self):
        return f"姓名:{self.name},HP:{self.HP},ATK:{self.ATK}"
 
 
# 创建第一个英雄
hero1 = Hero(100, 30, "德玛西亚")
hero2 = Hero(100, 70, "亚索")
hero3 = Hero(100, 10, "貂蝉")
hero4 = Hero(100, 5, "提姆")
# 攻击方法
print(hero1)
hero1.atk(hero2)
print(hero1)
hero1.atk(hero3)
print(hero1)

五、__del__方法

# __del__: 对象销毁的时候自动调用
# 1. 程序结束
# 2. del 对象
# 3. 不建议自己写del方法
class Dog:
    def run(self):
        print('xxx')
 
    def __del__(self):
        print("内存回收完毕")
 
 
a = Dog()
 
del a
 
while True:
    pass

六、总结

1.  基本概念:

类: 对一些具有相同的属性和行为的对象的抽象(设计图纸)


class 类名


类名: 大驼峰命名法(所有的单词首字母大写)


类内存空间中存放的


所有的对象共有的属性或者方法


对象: 是一个实际存在的对类的实例化(有一片内存空间)


实例化对象: 类名()


对象的空间中存储的:


对象独有的数据


概念的区分:


类: 纯概念


类对象: 程序运行后类所占用的空间


实例对象: 程序运行后对象所占用的空间


实例方法: 就有self的方法就是实例方法


实例属性: 通过self定义的属性就是实例属性


self


self : 存储对象的内存空间地址的


不同的对象调用相同的方法, 但是结果却不同, 原因就是因为当对象调用方法的时候, 会把自己的内存地址传给self, 这样的话不同的对象使用self的时候代表的属性就不同了.


2.  魔法方法:

init方法


作用: 初始化属性


调用: 在创建对象的时候 会自动调用


a = Dog("小白")


str方法


作用: 描述对象的信息


str方法中应该有return , return一个字符串类型的数据


调用: print(对象名),会自动调用


del方法:


作用: 回收内存空间


调用: 销毁对象的时候,就会自动调用


3.  常见的属性添加:

在类的外部添加实例属性


对象名.属性名 = 数据


xiaobai.name = "小白"

class Dog:
    def set_name(self, name):
        self.name = name
 
    def get_name(self):
        print(self.name)
 
 
xiaobai = Dog()
# 在类的内部给实例对象添加属性
xiaobai.set_name("小白")


目录
相关文章
|
4天前
|
Python
Python进阶第一篇(Python的面向对象)
Python进阶第一篇(Python的面向对象)
|
4天前
|
SQL 关系型数据库 MySQL
Python进阶第二篇(Python与MySQL数据库)
Python进阶第二篇(Python与MySQL数据库)
|
4天前
|
Python
Python基础第六篇(Python函数进阶)
Python基础第六篇(Python函数进阶)
|
7天前
|
开发者 Python
Python进阶--装饰器
Python进阶--装饰器
|
11天前
|
人工智能 小程序 数据挖掘
Python进阶之路:谁说“菜鸟”不能变“凤凰”?
【6月更文挑战第11天】Python初学者面对复杂代码时往往感到困难,但持续学习和实践能助其成长。巩固基础,深入学习高级特性,扩展到如数据分析、AI等领域,以及参与实践和阅读优秀代码,都是进阶的关键。装饰器是简化代码的工具,例如示例展示的my_decorator,可增强函数功能。保持热情与毅力,新手将不断进步。
|
15天前
|
算法 开发工具 数据安全/隐私保护
练手必备!Python编程实战—23个有趣的实战项目带你快速进阶
Python的练手项目有哪些值得推荐? 已经有6.4W关注,700W次浏览,回答都有450条了,本来遇到这种问题我是不会回答的,毕竟已经有太多人给出了答案,我再去回答就没什么意义了。 但想了想确实有很多刚学Python的并不清楚从哪里去找项目来练手,于是就有了这篇文章,基于这个目的,我也是找了好久,最后还是选择了分享这份手册,毕竟里面有细致的讲解,确实更适合练手一些。
|
16天前
|
Python 容器
GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
当下是 Python 急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格,并解释了背后的原理和机制。
|
10天前
|
程序员 Python
Python进阶:错误和异常处理,你的代码还能更健壮吗?
【6月更文挑战第12天】Python编程中的错误和异常处理对确保代码健壮性至关重要。当遇到如文件未找到或除零运算等错误时,Python会抛出异常。通过try-except语句可以捕获并处理异常,例如处理ZeroDivisionError时,可以在except块中给出错误信息。此外,可使用else和finally块进行更精细的控制,以及通过继承Exception类定义自定义异常。掌握这些技巧能帮助编写出更稳定且能优雅处理异常的代码。
|
14天前
|
存储 算法 开发者
掌握Python编程:从基础到进阶
【6月更文挑战第7天】本文将引导读者了解并掌握Python编程语言的基础知识和进阶技巧。我们将从Python的基本语法开始,逐步深入到更复杂的主题,如数据结构和算法、面向对象编程以及网络编程。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。
|
16天前
|
Java Python
Python 面向对象
Python 面向对象