Python面向对象之类属性类方法静态方法

使用面向对象开发时,第一步是设计类;
 当使用 类名() 创建对象时,会自动执行以下操作:
1.为对象在内存中分配空间--创建对象;
2.为对象的属性 设置初始值--初始化方法(init);
对象创建后,内存中就有了一个对象的实实在在的存在--实例;

因此通常也会把:
1.创建出来的对象叫做类的实例;
2.创建对象的动作叫实例化;
3.对象的属性叫实例属性;
4.对象调用的方法叫实例方法;

在程序执行时:
1.对象各自拥有自己的实例属性;
2.调用对象方法,可以通过self. 访问自己的属性/调用自己的方法;

结论:
1.每一个对象都有自己的内存空间,保存各自不同的属性;
2.多个对象的方法,在内存中只有一份,在调用方法的时候,需要把对象的引用传递到方法内部;

类是一个特殊的对象

Python中,一切皆对象:
class AAA: 定义的类属于类对象;
obj1 = AAA() 属于实例对象;
•程序运行时,类同样会被加载到内存中;
•在Python中,类是一个特殊的对象--类对象;
•在程序运行时,类对象在内存中只有一个,使用一个类可以创建出很多对象实例;
•除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法--类属性;类方法;
•通过类名. 的方式可以访问类的属性或者调用类的方法;

代码分层为:
1.类属性
2.类方法(cls)
 3.__init__定义实例属性
4.实例方法(self)

类属性和实例属性

类属性的定义及使用

类属性就是给类对象定义的属性;
 通常用来记录与这个类相关的特征;
 类属性不会用于记录具体对象的特征;

定义一个植物类,每新添一种植物就让植物类计数+1
class Plant(object):
    # 使用赋值语句定义类属性,记录所有植物对象的数量
    count = 0

def __init__(self, name):
        self.name = name
        # 每初始化一次,就让类属性的值+1
        Plant.count += 1


# 创建植物对象
duorou = Plant("多肉")
print("目前已养植物种类数量:", Plant.count) 
# 目前已养植物种类数量: 1

luhui = Plant("芦荟")
yingtao = Plant("樱桃")
# 输出植物对象的总数
print("目前已养植物种类数量:", Plant.count) 
# 目前已养植物种类数量: 3

属性的查找机制-向上查找

在python中 属性的获取存在一个向上查找机制:
1.首先在对象内部查找对象属性;
2.没有找到就会向上查找类属性;

因此,要访问类属性有两种方式:
1.类名.类属性
2.对象.类属性(不推荐)

注意:如果使用 对象.类属性=值 赋值语句,只会给对象添加一个属性,而不会影响到类属性的值;

可以用 对象.类属性 查看类属性,但不能用 对象.类属性=值 给它赋值;
 如果使用 对象.类属性=值 赋值语句,只会给对象添加一个属性,而不会影响到类属性的值;

类方法和静态方法

类方法

类方法概念和定义语法

类属性 就是针对类对象定义的属性;
 使用赋值语句在关键字class下面可以定义类属性;
 类属性用来记录与这个类相关的特征;

类方法 就是针对类对象定义的方法;
 在类方法内部可以直接调用类属性或者其他的类方法;

类方法定义语法如下:
@classmethod
def 类方法名(cls):
    pass

类方法需要@classmethod来进行修饰,告诉解释器这是一个类方法;
 类方法的第一个参数应该是cls;
 由哪一个类调用的类方法,方法内部的cls就是哪一个类的引用;
 这个参数和实例方法的第一个参数是self类似;
 使用其他名称也可以,但一般习惯使用cls;
 通过 类名. 调用类方法,调用类方法时,不需要传递cls参数;
 在方法内部,
 可以通过 cls. 调用类属性;
 通过 cls. 也可以调用其他类的方法;
 在类方法内部可以直接使用cls 访问类属性或者其他的类方法;

类方法案例演示
class Plant(object):
    # 使用赋值语句定义类属性,记录所有植物对象的数量
    count = 0

# 定义一个类方法
    @classmethod
    def show_count(cls):
        print("目前已养植物种类数量:", Plant.count)

def __init__(self, name):
        self.name = name
        Plant.count += 1


duorou = Plant("多肉")
luhui = Plant("芦荟")

# 调用类方法
Plant.show_count()  # 目前已养植物种类数量: 2

静态方法

静态方法概念和语法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/334563fdf99a2d0d91189a70ee1b93bf.html