模块

一、属性和方法

  • 类属性
    • 类属性:直接在类中定义的属性
    • 类属性可以通过类或类的实例访问。但是类属性只能通过类对象类修改,无法通过实例对象来修改。
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 别名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值