IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法) -> 正文阅读

[Python知识库]2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)

目录

一、定义类和对象

1.定义类

2.创建一个对象

2.1 创建一个实例对象并调用实例方法

2.2?创建另一个实例对象:

2.3 添加实例属性

二、__init__(self)

1. __init__(self) 声明多个实例属性

2.__init__传参? ? ? ? 改进

3 __init__总结

三、self

四、魔术方法:

__new__和__init__区别

其他魔术方法简单介绍


'''

面向对象编程:oop[object oriented programming] 是一种python编程思路

面向过程:就是我们一开始学习的,按照解决问题的步骤取写代码【根据业务逻辑去写代码】
在思考问题的时候,首先分析‘怎么按步骤去实现’,然后将问题解决拆解为若个个步骤,并将这些步骤对应成方法一部一部的最终完成功能【按步骤洗车】

面向对象:关注的是设计思维【找洗车店 给钱洗车】

从计算机角度来看:面向过程不适合做大项目,而面向对象适合做更大项目的设计

类和对象
类:类是具有一组 相同或相似特征【属性】和行为【方法】的一系列[多个]对象的集合

现实世界 ? ? ? ? ? ?计算机世界
行为----------------> 方法
特征----------------> 属性

对象:对象是实实在在的一个东西,类的实例化,具象化

类是对象的抽象化 ?而对象是类的一个实例

实例方法:在类的内部,用def 关键字定义 第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】
实例方法是归于类的实例所有

属性:定义在类内方法外的变量称为【类属性】?
在方法内部定义的【通过使用类似于self.变量名】变量 称为实例属性

'''


一、定义类和对象

1.定义类

(类结构 类名 属性 方法)

class 类名:
??? 属性
??? 方法

class Person:      # 类名一般用大驼峰命名法
    '''
    对应人的特征
    '''
    name='小明'          #类属性
    age=20            
    '''
    对应人的行为
    '''
    def __init__(self):    #   __魔术方法__
        self.name1='小明1'   #  实例属性
        pass
    def eat(self): #实例方法:归实例所有   
    # 第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】
        print('大口的吃饭')
        pass
    def run(self):         #实例方法
        print('飞速的跑')
        pass
    pass

注意第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】

2.创建一个对象

2.1 创建一个实例对象并调用实例方法

# 创建一个对象【类的实例化】
# 规则格式 对象=类名()
xm=Person()
xm.eat()    #调用函数
xm.run()
print("{}的年龄是:{}".format(xm.name,xm.age))      #小明的年龄是:20
print("{}的年龄是:{}".format(xm.name1,xm.age))      #小明1的年龄是:20

运行结果:

2.2?创建另一个实例对象:

# 创建另一个实例对象
xw=Person()              #创建出来的
xw.eat()                 #实例方法

2.3 添加实例属性

# 添加实例属性
xw.sex='男'             # 添加实例属性 属于实例私有的属性
xw.pro='生物信息'             # 添加实例属性 属于实例私有的属性
print(xw.sex)

运行结果:

# 如果有n个这样的对象被实例化 那么就需要添加很多次实例属性了 显然比较麻烦
# 引出 __init__(self)

二、__init__(self)

1. __init__(self) 声明多个实例属性

class People:
    def __init__(self):   # 默认被调用   #__方法名__ 为内置魔术方法
        '''
        实例属性的声明和初始化
        '''
        self.name='小倩'   # 实例属性初始化
        self.sex='女'
        self.age='18'
        pass
    def eat(self):         # 实例属性
        '''
        吃的行为
        :return:
        '''
        print('喜欢吃猕猴挑')
        pass
    pass

xq=People()    #此时xq已经拥有name,sex,age三种实例属性了
print(xq.name,xq.sex,xq.age)
xq.name='大倩'
xq.sex='女'
xq.age='19'
print(xq.name,xq.sex,xq.age)

运行结果:

2.__init__传参? ? ? ? 改进

# __init__传参    改进
class People:
    def __init__(self,name,sex,age):   # 默认被调用   #__方法名__ 为内置魔术方法
        '''
        实例属性的声明和初始化
        '''
        self.name=name   # 实例属性初始化
        self.sex=sex
        self.age=age
        pass
    def eat(self,food):         # 实例方法
        '''
        吃的行为
        :return:
        '''
        print(self.name+'喜欢吃'+food)
        pass
    pass
zhangheng=People('张衡','男',22)
print(zhangheng.name,zhangheng.age)    # 张衡  22

lh=People('李辉','男',18)
print(lh.name,lh.age)                 #李辉 18
lh.eat('苹果')                      #李辉喜欢吃苹果
zhangheng.eat('饺子')            #张衡喜欢吃饺子

?运行结果:

3 __init__总结

1.Python 自带的内置函数 具有特殊的函数 使用双下划线包起来的【魔术方法】

2.是一个初始化的方法,用来定义实例属性 和初始化数据的,在创建对象的时候自动调用 不用手动去调用

3.利用传参的机制可以让我们定义功能更加强大并且方便的 类

三、self

# self
class PersonB:
    '''
    定义类
    '''

    def getSelf(self):       #python解释器会自动把这个实例对象作为第一个参数传递给self
        print('self=%s'%id(self))
        pass
    def eat(self,name,food):
        print('%s喜欢吃%s,职业是%s'%(name,food,self.pro))
        pass
    def __init__(self,pro):
        '''

        :param pro: 专业
        '''
        self.pro=pro       # 实例属性的定义
        pass

# ld是一个新的实例化对象
ld=PersonB('生信')
ld.getSelf()
print('ld=%s'%id(ld))  # self与实例对象ld  内存地址相同
ld.eat('罗滴','水果')     # 罗滴喜欢吃水果

运行结果:

python解释器会自动把实例对象作为第一个参数传递给self,可以通过后面两者内存地址相同可知,self即是ld这个实例对象的引用。

self总结:

self只有在定义 实例方法的时候才有意义,在调用不必传入相应参数,由解释器 自动去指向

self的名字是可以更改的 可以定义成其他的名字,只是约定俗成的定义成self

self 指的是 类实例对象本身,相当于java中的this关键字

四、魔术方法:

类似 __str__? ?__new__? 都是python内置的魔术方法

# 魔术方法
# __str__
# __new__
class People:
    def __init__(self,name,age,food):  # 默认被调用   #__方法名__ 为内置魔术方法
        '''

        :param name: 名字
        :param age: 年龄
        :param food: 食物
        '''
        self.name=name   # 实例属性初始化
        self.age=age
        self.food=food
        #测试
        print('-------------init执行---------')
        pass
    def __str__(self):
        '''
        打印对象 自定义对象内容格式的
        :return:
        '''
        return '%s今年%d喜欢吃%s'%(self.name,self.age,self.food)
    def __new__(cls, *args, **kwargs):                     # 不写会自动补一个new
        '''
        创建对象实例的方法  每调用一次 就会生成一个新的对象 cls 就是class的缩写
        场景: 可以控制创建对象的一些属性,经常用来做单例模式的时候来使用
        :param args:
        :param kwargs:
        '''
        # 测试
        print('=============new执行==========')
        return object.__new__(cls)      # 在这里是真正创建对象实例的
    pass
zhh=People('张衡',22,'汉堡')
print(zhh)    # 张衡今年22喜欢吃汉堡           # 没有__str__会只输出地址  先new对象才能init
 

__new__和__init__区别

?__new__ 类的实例化方法 必须要返回(return)该实例 否则对象就创建不成功

?__init__ 用来做实例属性的初始化操作 也可以认为是实例的构造方法 接受类的实例 self 并对其进行构造

?__new__ 至少有一个参数 是cls 代表要实例化的类, 此参数在实例化时由python解释器自动提供

?__new__ 函数要先于__init__函数 执行

其他魔术方法简单介绍

__str__ 自定义对象内容格式的 打印对象 没有__str__会只输出地址 必须return
__class__?查看对象所在的类
__del__ 析构方法 不写会自动补一个del
__mro__ 方法解析顺序 ?
__call__将实例对象以函数的形式调用

?

?

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:06:03  更:2021-09-06 11:07:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:24:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码