首页 > 编程语言 >04-python基础

04-python基础

时间:2023-12-15 11:55:06浏览次数:36  
标签:__ 04 python self 基础 模块 def cls

类与对象

python 中同样存在类和对象的概念,在python的类中,通过class 创建声明类,类中存在构造函数和析构函数,而且存在一个类似于Java中的toString。

def __init__(self)
def __del__(self)
def __str__(self)

self 是python中类似于其他语言中 this 的功能。类成员变量就通过这个self进行定义

def __init__(self, name, age):
	self.name = name
	self.age = age

封装

python 是一个面向对象的编程语言,面向对象就会存在封装继承多态的特性,对于封装而言,python 主要是通过约定俗成对变量或函数进行封装。比如一个类中存在的成员变量,如果以两个下划线进行声明,就会成为封装后的数据,封装后的数据或函数在外部就不可以直接使用对象进行访问。

class A:
	def __init__(self, name):
		self.__name = name

此时的 __name 不能通过对象直接访问。相较于函数而言也是一样的,需要使用前置两个下划线进行声明。

子类不能调用父类的私有方法,但子类可以通过调用父类的公有方法(父类的公有方法中调用父类的私有方法)这种方式进行调用。

继承

继承可以实现代码的复用性,子类通过继承父类,可以继承父类的公有方法、成员变量。

如果父类中的方法需要改动,也可以在子类中的同名方法中,进行函数重写或扩展。

扩展就是在子类的方法中调用父类的方法,使用 super() 表示父类。

super 还可以通过以指定父类的方式进行调用。super(父类, self) 以这种方式进行调用。

python中存在单继承和多继承,多继承中使用了一种 mro 的属性进行筛选。用于在多继承、菱形继承中判断方法、属性的调用路径。

多态

python 中的多态相比而言没有更多的限制,只要传入的对象具备响应的方法就可以执行。

类属性和类方法

在程序运行时,类也会被加载到内存,类也是一种对象,类对象。

在其他语言中,静态方法通过类名的方式来调用。在python 中,存在一种类变量和类方法。

class A:
	count = 0
	
	@classmethod
	def func(cls):
		...

其中的count,通过 A.count 进行调用, func 中的cls 就是类A自身。func中可以通过 cls.count 访问到类变量。也可以通过A.count 进行访问。类方法需要使用 @classmethod 进行前置声明。

而self. xxx 中的xxx属于实例属性,是实例对象具备的属性。

静态方法

如果需要一个方法,既不用访问实例变量,也不用访问类变量或类方法。就可以声明为静态方法。

class A:
	@staticmethod
	def func():
		...

现在就很清楚了,

如果想要访问实例属性,则创建实例方法。

如果只想要访问类属性,则创建类方法。

如果既不访问实例属性,又不访问类属性,则创建静态方法。

实例方法中也可以访问类属性,只需要类名.的形式即可。

静态方法中存在 cls

单例

python 通过类名() 创建新对象的时候,python 的解释器会调用两个方法,__new__ 分配内存空间,__init__ 对象初始化。

此时就可以考虑使用单例模式,在new中进行判断,cls.instance 是否为空,如果为空,则分配新内存空间,如果不为空,则直接返回 cls.instance, 可以通过 id 查看内存空间是否保持一致。

class Object:
    instance = None

    def __new__(cls):
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

通过以上这种形式,就能够保证 Object() 返回的是一个单例。

class A:
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls)

    def __init__(self, name):
        self.name = name
    def __str__(self):
        return self.name

当类中存在 __new__ 时,创建对象就会先调用 __new__, 因此,new的参数就需要有除了cls之外的东西。

且new一定要return super的new方法,传入一个cls,用于创建内存空间。如果没有这一句,则没有申请内存空间,也就不存在创建对象了。

异常

Java中使用try catch 捕获异常,Python中使用try except 捕获异常,使用raise抛出异常。

示例:

def input_passwd():
    pwd = input("请输入密码")
    if len(pwd) > 8:
        return pwd
    else:
        ex = Exception("密码长度不足八位")
        raise ex


try:
    print(input_passwd())
except Exception as ex:
    print(ex)

python 中的异常可通过Exception自己创造。通过raise 进行抛出。

try...except 类似于其他语言的try...catch ,试图执行程序。

模块

模块就是 python 源文件,每一个 py 文件都是一个模块。只有导入模块才能使用这个模块中的工具。

通过 import 导入模块,导入之后,可使用模块的全局变量、函数、类。如果需要导入的模块名字太长,也可以通过 import xxx as xx 通过使用 as 自定义模块的名字。在使用其中定义的函数时,可直接通过xx.进行调用。模块别名应符合 大驼峰原则。

可以使用 from xxx import xx 从一个模块中导入部分工具进行使用。

如果两个模块中包含同名的函数,后导入模块的函数会覆盖掉先导入的模块中的函数。这种情况下,就应该使用as对模块进行别名处理。from xx import * 从一个模块中引入全部内容。效果类似 import xx

python 解释器倒入模块时,会先从当前目录中搜索,有就直接导入,如果当前目录不存在,再从系统目录搜索。自行编写的模块尽量不要和系统的模块重名。

每个模块具备一个 __file__ 属性,可以查看模块的完整路径。

标签:__,04,python,self,基础,模块,def,cls
From: https://www.cnblogs.com/zxinlog/p/17903088.html

相关文章

  • 【天翼云】【基础架构】相关面试内容普及
    第一弹,我们就讲讲中国电信天翼云的基础架构做什么滴?天翼云是中国电信旗下云计算品牌,致力于成为领先的云计算服务提供商。基础架构部作为天翼云的核心部门,负责构建天翼云的整个物理基础设施。打造了包括紫金DPU、物理服务器、物理网络、RDMA网络、操作系统、虚拟化、IDC在内的核心......
  • debug解决实际问题--python
    简述:原代码一直报错,提示索引超出范围"IndexError:tupleindexoutofrange"一、原代码:#-*-coding:utf-8-*-importpymysql,datetime#获取框架合约数据defframe_treaty_get(frame_treaty_no_list):frame_treaty_list=[]forframe_treaty_noinframe_t......
  • [Python学习笔记]制作自动将xls文件转化为xlsx文件的程序
    背景:供应商程序导出的文件是xls格式的,我需要使用PowerQuery将这些文件合并整理,但是目前没有找到可以打卡xls文件的代码,所以将xls文件转化为xlsx文件后再使用PowerQuery进行处理。思路:1.网上找到了将xls文件转化为xlsx文件的代码,将这个代码定义为一个函数去执行转换的功能......
  • 专访珠海华润银行首席信息官张昕:构建金融基础设施创新平台,打造特色数字化产业银行
    近期举行的中央金融工作会议强调,要做好科技金融、绿色金融、普惠金融、养老金融、数字金融五篇大文章,加快建设金融强国,坚定不移走中国特色金融发展之路,推动我国金融高质量发展。 加速金融业的科技赋能和数字化转型已成为实现高质量发展的必由之路。如何做好数字金融这篇大文章,......
  • 高分辨率拼接案例分析【基础算法】
    一、案例来源本例项目来源于群里面网友提问“在流水线上采集到的图片,相互之间位移基本确定,需要进行进一步精细拼接”希望得到的结果。具体而言,这是一块大型服务器板子,会走点拍100张图【特定设备】,每张图有部分重合,算下来应该七百多宽度重合,图像大小为5000多。难点是重合的全是......
  • 《平面设计基础》课程考核任务书
    《平面设计基础》课程考核任务书一、项目设计参考选题1)原创性:作品应具有创新品质和时代特征。2)功能性:作品应有转化为实际应用的可能性。3)审美性:设计作品应突出地域文化特色,工艺及载体形式具有独特性。4)规范性:提交的作品应具备规范性、完整性和系统性。二、项目设计具体要求......
  • 结构体和数据结构基础
    结构体和数据结构基础目录结构体和数据结构基础结构体结构体的定义单向链表向链表中新建节点原链表为空表结构体结构体的定义structstudent{longstudentID;charstudentName[10];charstudentSex;intyearOfBirth;intscore[4];};//给struct......
  • 【scikit-learn基础】--『预处理』之 数据缩放
    数据的预处理是数据分析,或者机器学习训练前的重要步骤。通过数据预处理,可以提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集提高数据性能,对数据的值进行变换,规约等(比如......
  • CF 1904 D. Set To Max
    EasyVersionHardVersionHardVersion的做法可以从EasyVersion用数据结构优化得到。首先我们想一下,什么情况需要进行操作?显然是\(a_i!=b_i\)的时候,并且当\(a_i>b_i\)的时候将会无解。那么当\(a_i<b_i\)的时候,应该怎么办呢,显然应该寻找左边和右边最近的\(j\),.满足\(a_j=b_i......
  • 0x09.Linux基础
    版本号xx.yy.zzxx是主版本号,yy是次版本号,奇数代表开发版,偶数代表稳定版,zz是更新次数。确定版本号,找expredhat忘记密码重新启动,在等待倒计时的时候,按e(编辑的意思)再按一下e键,停留在第二个,再按e。输入空格和s(单一的意思),再回车回到第二个,输入一个b(引导的意思),直接进入......