python的实例属性和静态属性_python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法...

类对象、类属性与实例对象、实例属性的区别

在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性。类属性在内存中只有一份,在__init__外部定义。

通过类创建的对象称为实例对象,描述实例对象的属性称为实例属性。实例属性在各自对象的内存中都保存一份,在__init__方法内部定义。

实例方法、类方法、静态方法的区别

这三种方法都是保存在类的内存中,调用者不同。

实例方法由对象调用,至少一个self参数,self代表对象的引用。

类方法有类调用,至少一个cls参数,并且需要装饰器@classmethod修饰。

静态方法由类调用,不需要参数,需要装饰器@staticmethod修饰。

创建原则:

只要访问了成员变量的方法都叫实例方法

只访问类变量的方法叫类方法

既不访问成员变量,也不访问类变量的方法叫成静态方法

举例说明

class Car(object): #类对象

car_num = 0 #类属性,在__init__外部定义。

def __init__(self, brand, price):

self.brand= brand #实例属性,在__init__内部定义

self.price =price

Car.car_num+= 1

def level(self): #实例方法,调用了实例属性

if self.price > 300000:print(f"{self.brand}是高级轿车")else:print(f"{self.brand}是非高级轿车")

@classmethoddef car_count(cls): #类方法,只访问类变量

print(f"我有{cls.car_num}辆车")

@staticmethoddef tips(): #静态方法,既不访问成员变量,也不访问类变量

print("温馨提示:开车不喝酒")if __name__ == "__main__":

bmw= Car("宝马", 200000) #通过类创建的对象称为实例对象

bmw.level()

wlhg= Car("五菱宏光", 400000)

wlhg.level()

Car.car_count()#调用类方法

Car.tips() #调用静态方法

1610045-20200303113722642-89631686.png

为什么会有静态方法?

静态方法既不访问成员变量,也不访问类变量,若写个和class同级别的def函数也能实现同样的功能,何必定义个静态方法呢?定义静态方法主要是规避两个模块调用同名函数的情况,

假设一个场景:为Car类定义一个同级别的def tips函数,再为Animal类定义一个同级别的def tips函数

classCar(object):pass

deftips():print("温馨提示:开车不喝酒")classAnimal(object):pass

deftips():print("温馨提示:不要伸手投食")

在python中,前面定义的函数会被后定义的同名函数覆盖,也就是说,按上面的场景调用tips 方法最终都调用的都是最后一个。为了明确各个tips所属类,于是就定义了静态方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值