模块

it2026-01-22  5

パイソン学習の第14回講義

一、属性和方法二、new魔法方法三、单例模式模块

一、属性和方法

类属性 类属性:直接在类中定义的属性类属性可以通过类或类的实例访问。但是类属性只能通过类对象类修改,无法通过实例对象来修改。 class A(object): # 类属性:直接定义在类中的属性。 # 类属性可以通过类和给类的实例来访问。 # 类中的属性只能通过类对象来修改,不能通过实例对象来修改。 count = 0 # pass a = A() a.count = 10 print('A', A.count) print('a', a.count)

打印输出结果: A 0 a 10

实例属性 实例属性:通过实例对象添加的属性属于实例属性实例属性只能通过实例对象来访问修改,类对象无法访问修改。 演示1: class A(object): pass a = A() a.count = 20 # 实例属性:实例属性就是通过实例对象来添加的属性。 # 实例属性只能由实例来调用,不能由类对象来调用。 # print('A', A.count) print('a', a.count)

打印输出结果: a 20 演示2:

# 实例属性:self代表实例 class A(object): # init方法里面的属性是实例属性,只能实例对象调用,这取决于self。 def __init__(self): self.name = '周慧敏' a = A() # print('A', A.name) print('a', a.name)

打印输出结果: a 周慧敏 演示3:

class A(object): def __init__(self): self.name = '周慧敏' #这个是实例方法,带self都是存储在实例中的。 # 如果类要调用实例方法,则需要传递实例进去 A.test(a) def test(self): # self代表着实例方法 print('这是test方法') a = A() A.test(a) a.test()

打印输出结果: 这是test方法 这是test方法 演示4(类方法与实例方法):

# (类方法与实例方法)装饰器方法: class A(object): def __init__(self): self.name = '周慧敏' def test(self): print('这是test方法!') # 类方法需要用@classmethod装饰器装饰,这个方法需要又一个cls参数,参数cls指的是类本身。 # 类方法,类可以直接调用,实例同样可以直接调用。 @classmethod def test1(cls): print('这是test1方法') # 静态方法:类和实例都可以直接调用 # 静态方法不需要指定任何默认的参数,它和类本身无关。 @staticmethod def test2(): print('这是test2方法') a = A() a.test1() A.test1() a.test2() A.test2()

打印输出结果:

这是test1方法 这是test1方法 这是test2方法 这是test2方法

二、new魔法方法

new魔法方法:用于创建于返回一个对象。在类准备将自身实例化时调用。 演示实例: class Deom(object): # int方法是初始化实例方法 def __init__(self): print('这是init方法!') # new方法用于创建和返回一个实例(对象)。在类准备将自身实例化时调用。 # new方法重写了object超类中的new方法 def __new__(cls, *args, **kwargs) print('这是new方法!') return super().__new__(cls) # 使用super方法调用原有父类的方法。使用return返回原有父类的方法。 # new方法覆盖了原有的new方法和init方法。 # 返回原来的方法之后,就可以调用出init方法和原有的new方法。 d = Deom()

打印输出结果: 这是new方法 这是init方法

总结: new方法就是构建出实例的作用。

对象创建的先后顺序: 通过new方法创建对象并将对象返回,传给inie方法。

注意:

new()方法用于创建对象。init()方法在对象创建的时候,自动调用。但是此处重写了父类的__new__()方法,覆盖了父类__new__()创建对象的功能,所以对象并没有创建成功。所以仅执行__new__()方法内部代码在创建对象时,一定要将对象返回,在会自动触发__init__()方法init()方法当中的self,实际上就是__new__返回的实例,也就是该对象

init()与__new__()区别

__init__实例方法,__new__静态方法__init__在对象创建后自动调用,__new__创建对象的方法

三、单例模式

单例模式是一种软件设计模式,也就是该类只包含一个实例(对象)。 演示1(单例模式的引出): 在这里插入代码片class Single(object): # pass name = '周慧敏' s = Single() s1 = Single() print(s, s1) # 会创建很多对象占用内存。--单例模式的引出 # 单例模式作用:只需要一个实例完成一个功能,节省内存的开支。

<main.Single object at 0x0000022585237FD0> <main.Single object at 0x0000022585237FA0>

单例模式的创建: ''' 如何用代码实现单例模式 对象不存在时候---->创建实例 对象存在的时候---->返回已经创建的实例 ''' class Single(object): __obj = None def __new__(cls, *args, **kwargs): if cls.__obj is None: cls.__obj = super().__new__(cls) return cls.__obj else: return cls.__obj s = Single() s1 = Single() print(s, s1)

打印输出结果: <main.Single object at 0x0000022585237E50> <main.Single object at 0x0000022585237E50> 总结:

创建一个实例(对象)时,为none。返回new创建的新的对象。第二个实例(对象)时,不为none,返回的是原有的对象。

单例模式的应用:应用在一些资源管理器中,比如日志记录等。

模块

模块化指将一个完整的程序分解成一个个小的模块。

通过模块的组合,来搭建一个完整的程序。

模块的特点:

方便维护方便开发模块可以服用

模块的创建:

1、首先创建一个py文件的模块2、在这个py文件的模块中输出你所需要实现某种功能的代码块3、右键当前文件,选择Mark Directory as中的Sources Root创建跟文件4、在你需要导包的文件中完成导包

导包的格式:

import 模块名称 as 模块中的函数名 from 模块名称 import 模块中的类名称 from 模块名称 import *

注意:*代表导入全部 演示实例: 上述图片中test.py是创建的模块文件 第十四讲就是使用Mark Directory as中的Sources Root创建跟文件 演示实例1:

# 第一种访问方法: import test as test1 print(test1) # 查看访问路径。 print(test1.a, test1.b) # 访问变量

打印输出结果:

这是我的第一个模块 <module 'test' from 'D:\\PycharmProjects\\wangjiaxin\\Python-Cheney老师基础讲解\\第十四将\\test.py'> 1 2

演示实例2:

# 第二种访问方法(访问类): # 模式一: from test import Person p = Person() print(p.name)

打印输出结果:

这是我的第一个模块 周慧敏

演示实例3:

# 模式二: # 导入*号相当于导入全部 from test import * p = Person() print(p.name)

打印输出结果:

这是我的第一个模块 周慧敏 模块的使用: 访问模块中的变量语法:模块名.变量名访问模块中的函数语法:模块名.函数名访问模块中的对象语法:模块名.对象名我们也可以引入模块中部分内容语法:from 模块名 import 变量,变量…还有一种引入方式语法:from 模块名 import 变量 as 别名
最新回复(0)