类里就两个玩意,一个方法一个变量
- 方法
- 类方法:@classmethod 类方法绑定类函数,用cls调用类函数。使用公共类函数搞事,就用类方法。外部调用类方法必须使用类名调用。
- 静态方法:@staticmethod 不与类和实例绑定的方法。类函数、实例函数一律不用,在类里自成一派,就用静态方法。
- 实例方法:def str(self)绑定实例变量,用self调用实例变量。 处理核心业务逻辑使用实例方法。
- 私有方法:_ _加双下划线 。外部不能调用的方法,在类里使用就好。
- 变量
- 类变量:类里共享变量。在类外边调用类变量必须使用类名调用。
- 实例变量:def _ _init_ _(self) , 给实例方法使用的变量,实例方法处理核心业务逻辑,实例变量最好是私有变量,外部不可以访问。但python这个语言你知道,根本就没有真正意义的封装属性,外部想访问一样可以。
- 私有变量:_ _加双下划线 外部不能调用的变量,在类里使用就会。私有变量用于实例变量
- 构造方法:def_ _init_ _(self, [str]):实例变量带参数。转为类方法传参使用。
总结:外部可以调用的只有类方法和类函数,必须通过类名直接调用。类方法和实例方法都可以带参数接收外部调用传参。
class Info:
# 类变量,全类共享
location = '翠花洗浴,南湖路162号,黑炭胡同18号,地下9单元'
# 不带参数的构造方法
def __init__(self):
# 实例变量,外部可以访问但没有意义。所以实例变量最好都是私有变量
self.money = 5
# 私有变量
self.__name = '工号168'
"""带参数的构造方法,接收类传参"""
# def __init_(self, ask):
# self.ask = ask
# 实例方法
def how_much(self, money):
if money > 5:
print('太贵了')
else:
print('告诉我工号', self.__name)
# 类方法
@classmethod
def address(cls, cipher):
if cipher == '天王盖地虎':
print('南湖小区8号楼1-1-1')
else:
print(cls.location)
# 静态方法
@staticmethod
def play():
print('自嗨')
"""开始使用这个类"""
# 调用类变量获取地址,不需要加密的信息
print(Info.location)
# 调用类方法查询地址,暗号正确返回正确地址,否则返回类变量地址
Info.address('天王盖地虎')
# 调用实例方法,先实例化类对象.询价属于核心业务,所以使用实例方法处理
play = Info()
play.how_much(6)
# 实例变量没有设置私有,被黑客直接获取底价
print(play.money)
# 调用静态方法, 不参与类里的业务逻辑
Info.play()