Python类属性、类方法和静态方法

Python类属性、类方法和静态方法

在Python中,一切皆对象。通过类创建出来的对象是实例对象,类本身也是对象,称为类对象。

一、类属性

对象都有属性,我们常说的对象属性是实例对象拥有的属性,又称为实例属性。

类对象所拥有的属性叫类属性,它被该类的所有实例对象所共有。类属性可以使用类对象或实例对象访问。

class House(object):

    price = 'high'


print(House.price)
h = House()
print(h.price)

House.price = 'too high'
print(House.price)
print(h.price)

print('-' * 20)
h.price = 'high'
print(House.price)
print(h.price)

运行结果:

high
high
too high
too high
--------------------
too high
high

类属性的定义方法是直接在类中定义一个属性,这样定义的属性就是类属性。

不管是通过实例对象还是通过类对象,获取到的类属性都是一样的。所以,当类的实例对象所记录的某项数据始终保持一致时,则可以将该属性定义成类属性。

可以通过类对象来修改类属性,但是不可以通过实例对象来修改类属性。用实例对象来修改类属性时不会报错,因为这时候其实是给类的实例对象定义了一个与类属性同名的实例属性。

在使用过程中,我们要尽量避免类属性和实例属性同名。如果有同名实例属性,实例对象会优先访问实例属性。

补充:

1.类属性也可以设置为私有,前边添加两个下划线。

2.实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有 ,仅占用一份内存,更加节省内存空间。

二、类方法

与类属性类似,类对象所拥有的方法叫类方法。

类方法一般和类属性配合使用,当方法中需要使用类对象(如访问私有类属性等)时,定义类方法。

class House(object):

    __price = 'high'

    @classmethod
    def get_price(cls):
        return cls.__price


print(House.get_price())

h = House()
print(h.get_price())

运行结果:

high
high

定义类方法,需要用装饰器@classmethod来标识其为类方法,并且类方法的第一个参数必须是类对象,一般以cls作为第一个参数。否则,类方法就没有定义成功,无法通过类对象来使用该方法。

三、静态方法

在Python中,静态方法是既不需要传递类对象也不需要传递实例对象的方法。形参里没有self/cls,不会自动传递实例对象和类对象。

class House(object):

    __price = 'high'

    @classmethod
    def get_price(cls):
        return cls.__price

    @staticmethod
    def description():
        return 'No money, no house'


print(House.description())

h = House()
print(h.description())

运行结果:

No money, no house
No money, no house

与定义类方法的方式相同,定义静态方法需要通过装饰器@staticmethod来进行修饰。

实例对象和类对象都可以访问静态方法。

当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象 (如类属性、类方法、创建实例等)时,可以将方法定义成静态方法。

补充:

1.静态方法取消了不需要的参数传递,有利于减少不必要的内存占用和性能消耗。

2.类中定义了同名的对象方法、类方法、静态方法时,调用方法会优先执行最后定义的方法。

 

 

 

  • 13
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中的方法静态方法是在级别上执行操作的工具。方法可以使用属性方法,而静态方法则不能。使用这些方法可以更好地组织代码,并提高代码的可读性和可维护性。\[2\] 方法是定义在上的方法,可以通过的实例来调用。方法使用@classmethod装饰器进行标识,它的第一个参数是本身,通常被命名为"cls"。方法可以访问属性方法,并且可以在的实例化之前或之后执行一些操作。\[1\] 静态方法也是定义在上的方法,可以通过的实例来调用。静态方法使用@staticmethod装饰器进行标识,它不需要或实例作为第一个参数。与方法不同,静态方法不能访问或实例的属性方法静态方法通常用于定义与无关的辅助函数,或者在不需要访问属性方法时执行一些操作。\[3\] 总结来说,方法静态方法都是在级别上执行操作的方法,但方法可以访问属性方法,而静态方法不能。选择使用哪种方法取决于具体的情况,如果需要访问属性方法,则使用方法,如果不需要访问属性方法,则使用静态方法。\[2\] #### 引用[.reference_title] - *1* [Python 实例方法方法静态方法](https://blog.csdn.net/lihao21/article/details/79762681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python-方法静态方法](https://blog.csdn.net/weixin_44412085/article/details/129968953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小斌哥ge

非常感谢,祝你一切顺利。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值