1、类的基础介绍
类对象:定义的类就是类对象
类属性:定义在__init__
外部的变量
类方法:定义在类中,且被@classmethod
装饰的方法
实例对象:类对象实例化后就是实例对象
实例属性:定义在__init__
内部带有self.
的变量
实例方法:定义在类对象中,且未被@classmethod
装饰的方法就是实例方法
静态方法:定义在类中,且被@staticmethod
装饰的方法
直观的解释见下图:
2、实例化方法
class ExampleClass:
class_variable = 10
print('类属性:', class_variable)
def class_method(cls, x):
y = cls.class_variable + x
return y
exampleclass = ExampleClass() #实例化
y = exampleclass.class_method(100)
print(y)
实例方法可以调用类属性和类方法。
实例对象可以访问类属性、类方法、实例属性、实例方法
3、@staticmethod静态方法
静态方法不接收类的实例(self)或类(cls)作为第一个参数,不需要对类实例化,可以直接类名.方法名()被调用,但不能访问类属性或实例属性,不能访问实例属性和调用实例方法
class Func:
@staticmethod
def add(x, y):
return x + y
# 使用静态方法
result = Func.add(3, 4)
34、 @classmethod用法
无需实例化可以被直接调用,但是需要接受cls
作为第一个参数传入。一旦实例方法前面被加了@classmethod,该实例方法的级别就从二级跃升到一级,与类是一个级别。(假设类是一级,类下面的实例方法是二级。)
类方法不能调用实例属性和实例方法
class Vehicle:
def __init__(self, vehicle_type):
self.vehicle_type = vehicle_type
print('初始化实例属性:',self.vehicle_type)
@classmethod
def car(cls):
print('类方法')
return cls(10).test(100)
def test(self, x):
print('实例化方法:', self.vehicle_type + x)
print(Vehicle.car())
输出
类方法
初始化实例属性: 10
实例化方法: 110
代码的执行流程如下:
Vehicle.car()
:类对象调用类方法。cls(10)
:其中cls
代指类对象Vehicle
,因此cls(10)代表Vehicle(10),相当于对Vehicle类进行了实例化。__init__
:执行类实例化cls(10)时,程序会对实例化属性进行初始化self.vehicle_type = vehicle_type,此时self.vehicle_type=10。.test(100)
:实例化对象cls(10)
调用实例化方法test(100)
,此时会执行实例化方法test()
中的内容。