Python学习笔记(六)——面向对象在python中的实际体现

本文详细介绍了Python中的类定义、属性(包括对象属性、类属性和私有属性)、方法(实例方法、类方法和静态方法)以及元类的概念,强调了属性访问权限和私有化方法的使用。同时,还涵盖了类的描述、文档编写以及特殊方法的应用。
摘要由CSDN通过智能技术生成


提示:以下是本篇文章正文内容,下面案例可供参考

一、如何定义一个类?

class 类名:
    pass   

*经典类
*新式类
类名也是一个变量,可以改名字。

二、属性相关

1.属性和变量的区别及判定体现

(1)概念:变量是“可以改变的量值”,属性是“属于某个对象的特性”
(2)访问权限
变量:根据不同的位置,存在不同的访问权限。如全局变量、局部变量、…
属性:只能通过对象来进行访问
(3)判定依据:是否存在宿主
有:属性 对象属性/类属性
无:变量

2.对象属性

#1.定义一个类
class Persion:
    pass
    
#2.根据类,创建一个对象
p=Persion()

#3.给p对象,增加一些属性
p.age=18

#4.修改属性
p.age=123

#5.删除属性
del p.age

#验证是否添加成功
print(p.__dict__)

3.类属性

万物皆对象,类也是一个对象
Money是一个类,也是一个变量

#1.增加属性
#方式一
class Money:
    pass
Money.age=18

#方式二
class Money:
    age=18
    count=1
    num=666
    pass


#2.查询属性
#可以通过类访问,也可以通过对象访问
#为什么可以通过对象访问到类属性 和python对象的属性查找机制有关,一般优先到对象自身去查找属性,如果没有找到,通过_class_找到对象对应的类,到这个类里面去查找
#eg.p._class_=Money 来改变类

#3.修改一个属性


#5.删除属性
del 类名.属性
#不能通过对象删除


#验证是否添加成功
print(Money.__dict__)
print(Money.count)

4.对象属性和类属性的关系

存储位置和抽象层次不同,类属性和对象属性的宿主不同。

三、方法相关

1.概念

描述一个目标的行为动作,比如描述一个人怎样吃,怎样喝,怎样玩。

和函数非常类似
(1)都封装了一系列行为动作
(2)都可以被调用的之后,执行一系列行为动作
(3)最主要的区别就是:调用方式

2.划分:实例方法、类方法、静态方法

(1)划分依据是:方法的第一个参数必须要接受的数据类型
(2)不管哪一种类型的方法,都是存储在类当做
(3)不同类型方法的调用方式不同

3.实例方法

class Persion:
      def run(self):
               pass

self是形参名称,如果实例方法没有接受任何参数,则会报错。使用实例调用实例方法的时候,解释器会自动调用对象本身传递参数。

4.类方法

class Persion:
      @classmethod
      def leifangfa(cls,a):
               pass

当使用类本身时,才会使用类方法。

5.静态方法

既不想使用实例又不想使用类的时候,就会使用静态方法。

class Persion:
      @staticmethod
      def jingtai():
               pass
Person.jingtai()

p=Person()
p.jingtai

func=Person.jingtai
func()

实例方法既可以访问类属性也可以访问实例属性,类方法只能访问类属性。

四、补充

1.类相关补充

1.元类

(1)概念

是创建类对象的类。
int、str也是类,不过是系统内值的类。

(2)类对象的创建方式以及创建流程

手动创建

def run(self):
    print("---",self)
XXX=type("Dog",(),{"count":0,"run":run}


创建流程
1.检测类对象是否有明确_metaclass_属性
2.检测父类是否存在_metaclass_属性
3.检测模块中是否存在_metaclss_属性
4.通过内置的type这个元素来创建这个类对象

2.类的描述

1.目的

方便理清逻辑思路,方便多人合作开发时的沟通,方便生成项目文档。

2.项目文档

必须涵盖当前项目所有有用的模块,以及全局变量和局部变量,类以及方法。

(1)使用内置模块——pydoc

打开cmd
查看文档描述 python3. -m pydoc 模块名称
启动本地服务,浏览文档 python3. -m pydoc -p 1234
生成指定模块html文档 python3 -m pydoc -w 模块名称

(2)使用三方模块

2.属性相关补充

1.私有化属性

属性只能在类的内部访问。
保证属性的安全性。
*python并没有真正的私有化支撑,但是,可以使用下划线完成伪私有的效果。类属性(方法)和实力属性(方法)遵循相同的规则。

(1)公有属性:x——什么也没有加

属于公有属性,可以在类内部访问也可以在子类内部访问。在模块其他位置访问时,可以通过类访问(父类、派生类),也可以通过实例访问(父类实例、派生类实例)。跨模块也可以访问(import形式导入,from 模块 import* 形式导入)

(2)受保护属性:_y

可以在类内部访问也可以在子类内部访问。在模块其他位置访问时会警告,可以通过类访问(父类、派生类),也可以通过实例访问(父类实例、派生类实例)。跨模块也可以访问会警告(import形式导入,from 模块 import* 形式导入:没有_all_指明对应变量会报错)

(3)私有属性:__z

仅仅只能在类的内部访问,在跨模块访问时参照但下划线开头变量的访问原则。
*私有属性的实现机制
(1)名字重整:重改_x为另外一个名称,如_类名_x
(2)目的:防止外界直接访问,防止被1子类同名称属性覆盖。
*引用场景
(1)数据保护
可通过以下方法创建实例属性,同类属性完全不一样!(不一样的点在哪里值得思考)

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

(2)数据过滤

class Persion:
# 主要作用,当我们创建好一个实例对象后,会自动调用这个方法,来初始化这个值。
      def __init__(self):
#这样外界不能修改
               self.__age=18
       def setAge(self,value):
        #可以在这设置一个条件进行过滤
         

(4)只读属性:

一个属性(一般指实例属性),只能读取,不能写入。
应用场景:有些属性,只限在内部根据不同场景进行修改,而对外界来说,不能修改,只能读取。
方式一:
方案:
a.全部隐藏 私有化——既不能读也不能写
通过属性前置双下划线实现
b.部分公开 ——公开读的操作
方案二:

class Persion(object):
      def __init__(self):
               self.age=18
      # 主要作用就是,可以以使用属性的方法,来使用这个方法。
      @property
      def age(self):
          return self.__age

@property
作用:将一些“属性的操作方法”关联到某一个属性中。
概念补充:
(1)经典类:没有继承(object)
(2)
*python2和python3版本有所不同,如果想使用新式类,尽量使用(object)

(4)内值特殊属性
1.类属性

dict:类的属性
bases:类的所有父类构成元组
doc:类的文档字符串
name:类名
module:类定义所在的模块

2.实例属性

dict:实例的属性
class:实例对应的类

3.方法相关补充

1.私有化方法 在名称前面加—__

2.内置特殊方法

1.信息格式化操作

(1)_str_方法
(2)_repr_方法

2.调用方法

_call_方法

3.索引操作

可以对一个实例对象进行索引操作
步骤:
实现三个内置方法
新增、查改、删除

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值