方法分类
- 公有方法
- 私有方法
- 静态方法
- 类方法
私有方法和公有方法统称实例方法
什么是实例方法?
所谓实例方法有以下特点
- 1、实例方法可以访问属于类和对象的成员
- 2、必须至少有一个名为self的参数
- 3、self参数是方法的第一个形参,self代表对象本身
- 4、在类的实例方法中访问实例属性时需要以self为前缀,
- 5、但在外部通过对象名调用对象方法时并不需要传递这个参数
- 6、如果在外部通过类名调用属于对象的公有方法,需要显式为该方法的self参数传递一个对象名,用来明确指定访问那个对象的数据成员。
class Car(object):
"""定义一个实例方法"""
def __init__(self,n): # 构造函数
self.name = n
def printd(self): # 定义一个实例方法
print(self.name)
car1 = Car('AUDI')
car2 = Car('benz')
car3 = Car('HONDA')
car4 = Car('CIVIC')
car5 = Car('TOYOTA')
car6 = Car('PRADO')
car7 = Car('COROLLA')
car1.printd()
car2.printd()
car3.printd()
car4.printd()
car5.printd()
输出结果
AUDI
benz
HONDA
CIVIC
TOYOTA
什么是类方法?
- 采用装饰器 @classmethod 来定义
- 需要定义一个类变量来存放实例的个数
看下例子
class Car(object):
"""统计类Car实例的个数"""
name_number = 0
def __init__(self):
Car.name_number = Car.name_number + 1
@classmethod
def get_number(cls):
return cls.name_number
car1 = Car()
car2 = Car()
car3 = Car()
print(car1.get_number())
print(car2.get_number())
print(car3.get_number())
运行结果
3
3
3
什么是静态方法?
- 静态方法不需要引用类或者实例
- 比如,设置环境变量,修改另一个类的变量
- 使用 @staticmethod 来实现
# 定义一个全局变量
IND = 'ON'
class Car(object):
"""关于车的类"""
def __init__(self,n): # 定义一个构造函数
self.name = n
@staticmethod # 定义一个静态方法
def checkind(): # 检测全局变量的值是否与检查的值一致,一致则往下走
return IND == 'ON'
def do_reset(self): # 定义一个实例方法
if self.checkind():
print('Reset done for:{}'.format(self.name))
def set_db(self): # 定义一个实例方法
if self.checkind():
print('DB connection made for:{}'.format(self.name))
car6 = Car('PRADO')
car7 = Car('COROLLA')
car6.do_reset()
car7.do_reset()
car6.set_db()
car7.set_db()
运行结果
Reset done for:PRADO
Reset done for:COROLLA
DB connection made for:PRADO
DB connection made for:COROLLA
不一致则停止不往下走
# 定义一个全局变量
IND = 'OFF'
class Car(object):
"""关于车的类"""
def __init__(self,n): # 定义一个构造函数
self.name = n
@staticmethod # 定义一个静态方法
def checkind(): # 检测全局变量的值是否与检查的值一致,一致则往下走
return IND == 'ON'
def do_reset(self): # 定义一个实例方法
if self.checkind():
print('Reset done for:{}'.format(self.name))
def set_db(self): # 定义一个实例方法
if self.checkind():
print('DB connection made for:{}'.format(self.name))
car6 = Car('PRADO')
car7 = Car('COROLLA')
car6.do_reset()
car7.do_reset()
car6.set_db()
car7.set_db()
没有任何输出