打印输出结果: 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方法 这是init方法
总结: new方法就是构建出实例的作用。
对象创建的先后顺序: 通过new方法创建对象并将对象返回,传给inie方法。注意:
new()方法用于创建对象。init()方法在对象创建的时候,自动调用。但是此处重写了父类的__new__()方法,覆盖了父类__new__()创建对象的功能,所以对象并没有创建成功。所以仅执行__new__()方法内部代码在创建对象时,一定要将对象返回,在会自动触发__init__()方法init()方法当中的self,实际上就是__new__返回的实例,也就是该对象init()与__new__()区别
__init__实例方法,__new__静态方法__init__在对象创建后自动调用,__new__创建对象的方法<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 别名