一、 类属性
相关的概念及说明
- 创建出来的对象叫做类的实例方法
- 创建出来的属性叫做类的实例属性
- 不同的实例的不同的属性在内中是不同的,是独立的
- 多个对象的方法在内存中只有一份,在调用的时候,需要把对象的引用传递到方法内部
二、类对象
[1]说明
class A(object):
代码块
A其实也是一种对象,称为类对象
[2]特点
- 在程序运行的时候,类同样是加载到内存中去
- 在python中类是一个特殊的对象,称为类对象
- 在运行的时候,类对象只有一份,使用一个类可以创建多个对象实例
- 除了封装的实例的属性和方法,类对象还可以拥有自己的属性和方法
- 通过
类名.
的方式访问类的属性/类的方法
三、类属性的定义及使用
[1]定义
在类中直接使用赋值语句即可,同时类属性是被所有的类所创建出来的对象(实例)以及类对象所共有的,可以参考此博主的博文
[2]应用
通常记录的是和类相关的特征
[3]在类方法外部访问类属性的语法
1.语法
类名.类属性名
实例名.类属性(不推荐使用)
2. 注意:
- 如果使用
对象.类属性 = 值
赋值语句,只会给对象添加一个属性,而不会影响到类属性的值,但是一定要注意如果两个类属性和实例属性重名的话会覆盖类属性 - python的属性查找机制:
3. 例子:
class Tool(object):
# 类属性的定义是利用赋值语句进行定义的,记录的是类的一个特征
count = 0
def __init__(self,name):
self.name = name
# 让类属性的值+1
Tool.count += 1
# 创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("水桶")
tool1.count = 8 #创建一个实例属性和类属性同名,则会覆盖类属性的值
print(tool1.count)
# 输出工具对象的总数
print(Tool.count)
[4]类属性的例子
class Human(object):
string = "I am a string" #定义一个类属性,是一个字符串类型
num = 0 #定义一个类属性来记录人的总数
def __init__(self, name, age, sex):
self.dict = {"name":name,
"age":age,
"sex":sex}
#让类属性加+1
Human.num += 1
def print_message(self):
for i in self.dict:
print(str(i)+ ":"+str(self.dict[i]),end=" ")
print()
xiaoming = Human("小明",18,"男")
xiaoming.print_message()
xiaohua = Human("小花",18,"女")
xiaohua.print_message()
print(Human.string) #在函数外部访问类属性
print("现在有%d人" % Human.num) #访问在类的外部类属性
四、类方法和静态方法
1.类方法
[1]类属性
1. 说明
- 类属性 是针对 类对象 定义的属性
使用赋值语句
在 class 关键字下方可以定义类属性
类属性 用于记录 与这个类相关 的特征 - 类方法就是针对类对象 定义的方法
- 在类方法内部可以直接访问类属性或者调用其他的类方法
2.语法
@classmethod
def 类名(cls):
代码块
注释:
1.@classmethond这个装饰器告诉python此方法是一个类方法
2. cls和self在类中的作用是一样的
3. 同时由哪一个类调用,cls就是哪一个类
[2]在类方法外部访问类方法的语法
类名.方法(参数表)
[3]例子
class Human(object):
string = "I am a string" #定义一个类属性,是一个字符串类型
num = 0 #定义一个类属性来记录人的总数
def __init__(self, name, age, sex):
self.dict = {"name":name,
"age":age,
"sex":sex}
#让类属性加+1
Human.num += 1
@classmethod #定义类方法
def show_people_num(cls):
print("我们现在一共有%d个人" % cls.num) #在类方法的内部访问类的属性
def print_message(self):
for i in self.dict:
print(str(i)+ ":"+str(self.dict[i]),end=" ")
print()
xiaoming = Human("小明",18,"男")
xiaoming.print_message()
xiaohua = Human("小花",18,"女")
xiaohua.print_message()
print("现在访问的是类属性:"+Human.string) #在函数外部访问类属性
Human.show_people_num() #在函数外部调用类方法
2.静态方法
[1]应用场景
在开发时,如果需要在类中封装一个方法,这个方法:
既 不需要
访问 实例属性
或者调用实例方法
也 不需要
访问 类属性
或者调用类方法
这个时候,可以把这个方法封装成一个 静态方法
[2]语法
class Dog(object):
@staticmethod
def run():
# 不访问实例属性也不需要访问类属性的时候就可以利用静态方法了
print("跑步")
# 静态方法的引用: 类名.静态方法名
Dog.run()
注意:
静态方法的引用: 类名.静态方法名