静态类
把可以创建实例的类叫动态类,还有一种不支持实例的静态类。
1、静态类和动态类的关键区别
1)静态类内部没有self关键字,也就是不能被实例化。
2)静态类不能通过类名传递参数。
3)静态类不支持__init()__初始化函数。
4)静态类不能被真正实例化,但它可以集成变量或函数,是一个带结构的数据类型。
静态类的定义
class Static_test():
name='Tom' #类局部变量name,没有定义属性的说法
age=21 #类局部变量age
address='China' #类局部变量address
call_number='00001' #类局部变量call_number
def a(): #函数a,没有使用self参数,不能叫方法
i=0
i+=1
print("第一个函数%d"%(i))
def b(add=1): #函数b
print("第二个函数%d"%(add))
def c(add=1): #函数c
print("第三个函数%d"%(add))
return add
静态类不能实例化使用,上述代码为静态类的定义,内部见不到self关键字,不能实例化。
s=Static_test()
s.a()
将其实例化会如下错误:
TypeError: a() takes 0 positional arguments but 1 was given
静态类的使用
可以直接用类名调用其内部的变量和函数
class Static_test():
name='Tom' #类局部变量name,没有定义属性的说法
age=21 #类局部变量age
address='China' #类局部变量address
call_number='00001' #类局部变量call_number
def a(): #函数a,没有使用self参数,不能叫方法
i=0
i+=1
print("第一个函数%d"%(i))
def b(add=1): #函数b
print("第二个函数%d"%(add))
def c(add=1): #函数c
print("第三个函数%d"%(add))
return add
print('name:%s'%(Static_test.name))
print(Static_test.a())
print(Static_test.b(2))
print(Static_test.c(3))
# 结果为:
# name:Tom
# 第一个函数1
# None
# 第二个函数2
# None
# 第三个函数3
# 3
利用静态类可以归类集成变量、函数的特点,可以把用途相关的变量或函数组织在一起,然后存放于类模块,供其他代码通过类名直接调用。
类和实例的概念总结
1)类分为动态类和静态类
2)实例由动态类生成,核心是属性和方法。
3)现实世界对象、动态类、实例抽象内容比较如下
现实世界对象 | 动态类 | 实例 |
---|---|---|
特性 | 数据 | 属性 |
行为 | 函数 | 方法 |
类与面向对象编程
面向对象编程的核心方法是封装,继承,多态
1)封装
封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
这里的属性、行为就是Python语言动态类里的属性定义,方法定义,逻辑单元就是动态类。通过动态类把属性定义、方法定义(就是数据变量和函数)集成在一起就是封装。
2)继承
继承描述了子类属性从祖先类继承这样一种方式。
3)多态
多态性是指相同的函数可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
类编写的一些注意事项
1、属性和方法的重名问题要注意
2、不要直接使用动态类内的数据变量
多实例的情况下,直接使用动态类内的数据变量,存在属性变量值使用混乱的可能性。
3、当类变得庞大起来时,应该合理拆分。
4、可以在类里引用外面已经定义的函数。