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知识库 -> Python面向对象自学笔记 -> 正文阅读

[Python知识库]Python面向对象自学笔记

笔记初始

基于生疏的C++面向对象基础,为了巩固以及更好的学习了解Py,突发奇想,作此拙作。
课程来源:撩课学院
推荐该课程是因为每集时长短,符合当今快节奏的社会,在娱乐至死的大潮中,可以压缩碎片化时间,为自己的未来添砖加瓦,且附一个异常精致的思维导图——XMind(B站介绍有,在此出于版权,不便附上,但深表钦佩)

第一章——基础理论(1-5)

重点:面向过程和面向对象的区别(做饭的例子非常形象)

第二章——面向对象在python中的实践(6-82)

定义一个类(6)

class 类名:
        pass

怎样通过类,创建出一个对象?(7-8)

  1. 根据类创建对象-`one = Money()
  2. 类的定义
  3. 根据类,创建出一个对象
  4. 将对象的唯一标识返回

属性相关(9-23)

属性和变量的区别及判定依据?

思维导图很清楚,就不过多赘述

对象属性


  • 尤其初始化——init

  • del 该变量

  • 注意访问不到时的报错:
    AttributeError: ‘Person’ object has no attribute ‘sex’
    查看对象的所有属性?
    dict

类属性

  • 1、类也是对象
  • 2、增
    分成从类的内部和从外部增加
  • 3、查
    优先从对像自身上查找属性,找到则结束,如果没有找到,根据class找到对象对应的类,到这个类里面查找。
  • 4、改
    不能通过对象修改类属性
  • 5、删
    不能通过对象删除,del语句只能删除直系属性
  • 6、注意、
    类的属性的增、删、改只能通过类来访问,查询的时候可以通过对象和类来访问!
  • 7、补充

对象属性和类属性的区别和联系

  • 两者不同:
    1、存储位置不同(一个是类,一个是对象)
# 1. 定义一个类
class Person:
	age = 10
    pass

# 2. 根据类, 创建一个对象
p = Person()

2、抽象层级不同
类是抽象的
对象是具化的
3、宿主不同(以上面为例)
类——Person
对象——p
4、补充:
p.age += 1
Person.age 与 p.age 打印的结果分别是多少?
10
11

方法相关(24-33)

1、方法概念——def
2、分类:
实例方法:

class Person:
	def run(self):
	pass

一般使用对象来调用
类调用:必须传递一个对象,因为实例方法要求。
对象调用:不用手动传,解释器会默认把调用对象本身传递过去。
类方法:

class Person:
	@classmethod
	def countPerson(cls):

一般使用类来调用
类调用:不用手动传递第一个参数,会自动的把调用的类本身给传递过去。
对象调用:不用手动传递第一个参数,会自动的把调用的对象对应的类给传递过去。
静态方法()

class Person:
	@staticemethod
	def countPerson():

类调用:直接调用就可以, 不需要考虑第一个参数。
对象调用:直接调用就可以
直接调用就可以, 不需要考虑第一个参数
划分依据等等:方法的第一个参数必须要接收的数据类型。
不管是哪一种类型的方法,都是存储在类当中;没有在实例当中的
函数和方法的区别
函数都是独立的个体,函数之间几乎没有共享的数据,
方法有宿主。

补充(34-57)

类相关补充

1、元类(type型):结构图figure12、生成项目文件/类的描述及生成html(37-38)

属性相关补充

私有化属性

1、概念
2、意义
3、注意
4、x 公有属性

5、_y 受保护属性
6、__z 私有属性
私有属性的实现机制——名字重整(Name Mangling),重改__x为另外一个名称, 如_类名__x
应用场景:

class Person:

    # 主要作用, 当我们创建好一个实例对象之后, 会自动的调用这个方法, 来初始化这个对象
    def __init__(self):
        self.__age = 18

    def setAge(self, value):
        if isinstance(value, int) and 0 < value < 200:
            self.__age = value
        else:
            print("你输入的数据有问题, 请重新输入")

    def getAge(self):
        return self.__age
p1 = Person()
p2 = Person()
p1.setAge(20)
print(p1.getAge())
p2.setAge(240)
print(p2.getAge())

输出是
20
你输入的数据有问题, 请重新输入
18

只读属性(主要应用在实例属性)

有些属性, 只限在内部根据不同场景进行修改, 而对外界来说, 不能修改, 只能读取
1、方案一:
私有化的部分:通过"属性前置双下划线"实现
部分公开:优化-加装饰器@property
eg:

class Person(object):
    def __init__(self):
        self.__age = 18

    # 主要作用就是, 可以以使用属性的方式, 来使用这个方法
    #将一些"属性的操作方法"关联到某一个属性中
    @property
    def age(self):
        return self.__age
p1 = Person()
# p1._Person__age = 999
p1.__dict__["_Person__age"] = 999
print(p1.age)
print(p1.__dict__)

输出:
999
{’_Person__age’: 999}

经典类和新式类
经典类:没有继承object
新式类:继承object
且:在python2中,定义一个类,没有显式的继承自object,那么这个类就是一个继承类,显式的继承自object,他才是一个新式类。
在python3中,定义一个类,会隐式的继承object,所以默认情况下,就已经是一个新式类。
建议,无论在python2和3,都显式的继承object。

property的作用
将一些"属性的操作方法"关联到某一个属性中,即将一个属性的删改查关联到不同方法里面。
官方文档解释:

def __init__(self, fget=None, fset=None, fdel=None, doc=None): 
Property attribute.
        
          fget
            function to be used for getting an attribute value
          fset
            function to be used for setting an attribute value
          fdel
            function to be used for del'ing an attribute
          doc
            docstring

property作为函数在新式类的使用方法(用例出自视频)

class Person(object):
    def __init__(self):
        self.__age = 18


    def get_age(self):
        print("----, get")
        return self.__age

    def set_age(self, value):
        print("----, set")
        self.__age = value
    age = property(get_age, set_age)
p = Person()
print(p.age)

p.age = 90
print(p.age)

print(p.__dict__)

输出:
----, get
18
----, set
----, get
90
{’_Person__age’: 90}
property作为装饰器在新式类的使用方法(用例出自视频)
官方文档

class C(object):
        @property
        def x(self):
            "I am the 'x' property."
            return self._x
        @x.setter
        def x(self, value):
            self._x = value
        @x.deleter
        def x(self):
            del self._x
    """

视频用例:

class Person(object):
    def __init__(self):
        self.__age = 18

    @property
    def age(self):
        print("----- get")
        return self.__age

    @age.setter
    def age(self, value):
        print("----- set")
        self.__age = value

p = Person()
print(p.age)

p.age = 10
print(p.age)

property在经典类中的使用(切换版版本为python2)
在经典类中,property只会关联读取方法,不会关联设置和删除方法。
一般不用

2、方案二:
关键在只读两个要求:(1)可以读取。(2)不能写入
故,引入__setattr__(self, key, value):
有这一步操作

class Person:
    # 当我们通过 "实例.属性 = 值", 给一个实例增加一个属性, 或者说, 修改一下属性值的时候, 都会调用这个方法
    # 在这个方法内部, 才会真正的把, 这个属性, 以及对应的数据, 给存储到__dict__字典里面
    def __setattr__(self, key, value):
        print(key, value)

        # 1. 判定, key, 是否是我们要设置的只读属性的名称
        if key == "age" and key in self.__dict__.keys():
            print("这个属性是只读属性, 不能设置数据")
        # 2. 如果说不是, 只读属性的名称, 真正的给它添加到这个实例里面去
        else:
            # self.key = value
            self.__dict__[key] = value
p1 = Person()
p1.age = 18
print(p1.age)
print(p1.__dict__)

重点:由上例
if key == “age” and key in self.dict.keys():
解释:self.dict.keys()——字典型
使得一开始该字典中无age然后继续循环故第一次添加成功,后字典中有了age故只读取。

系统内置特殊属性

(1)类属性

__dict__:类属性
__bases__:类的所有父类构成元组
__doc__类的文档字符
__name__类名
__module__类定义所在模块

(2)实例属性

__dict__:类的实例
__class__:实例对应的类

方法相关补充

私有化方法

在函数名前加两个下划线,与属性私有化相同,名字重整机制是相同的。

def __方法():
	pass

注意:不要定义 “_类名__方法名” 这种方法

内置特殊方法(完成特定功能)

  1. 信息格式化操作
    (1)、__str__
    作用:一个对象的描述字符串, 更加方便用户阅读, 对用户更友好
 def __str__(self):
	return "描述

用例:

class Person:
    def __init__(self, n, a):
        self.name = n
        self.age = a

    def __str__(self):
        return "这个人的姓名是%s, 这个人的年龄是:%s" % (self.name, self.age)

p1 = Person("sz", 18)
print(p1)

p2 = Person("zhangsan", 19)
print(p2)
s = str(p1)
print(s, type(s))

(2)__repr__面向开发人员

def __repr__(self):
	return "描述

触发__str__的方法:

直接打印:print(p1)
str方法:s=str(p1) print(s)

触发__repr__的方法:

s=repr(p1) print(s)
在交互模式里面将对象名称写出,敲回车
  1. 调用操作

第三章——Python对象的生命周期,以及周期方法()

第四章——面向对象编程-综合案例

第五章——面向对象三大特性

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:00:43  更:2022-01-16 13:01:28 
 
开发: 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/16 3:33:31-

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