专栏首页数据分析与挖掘python之类也是一个对象

python之类也是一个对象

python中一切皆对象:

  • class A:是一个类对象
  • a = A():是一个实例对象

在程序运行时,类同样会被加载到内存。

在python中,类是一个特殊的对象--类对象。

在程序运行时,类对象在内存中只有一份,使用一个类可以创建出多个对象实例。

除了封装实例的属性和方法外,类对象还可以有自己的属性和方法。

通过类名.的方式可以访问类的属性和调用类的方法。

什么是类属性?

类属性就是给类对象中定义的属性,即在class下方使用赋值语句即可。通常用于记录与这个类相关的一些特征。类属性不会用于记录具体对象的特征。例如:

class Tool(object):
    count = 0
    def __init__(self,name):
        self.name = name
        Tool.count +=1
t1 = Tool("first")
t2 = Tool("second")
t3 = Tool("third")
print(Tool.count)

输出:3

其中count就是一个类属性,该属性用于记录创建了多少个实例化的对象。访问时通过(类名.类属性名)进行访问。

接下来有另外一个问题:假设我们在实例化的对象中调用该类属性会出现什么结果呢?

print(t1.count)
print(t3.count)

输出:3 3

说明了类属性是所有对象都共用的,可以这么理解,类属性相当于c++语言中的static,为静态的。还是推荐使用类名来使用。

接下来就有另一个问题,假设我们通过对象访问类的属性,然后改变它的值,又会发生什么呢?

t3.count = 99
print(t3.count)
print(Tool.count)

输出:99 3

python解释器在执行赋值语句时,就会在该对象中查找,如果该对象中没有count属性,那么就会为该对象新建一个属性count,并赋值成99,而不会影响到类属性。这就是使用对象访问类属性存在的问题。

什么是类方法?

类方法需要用修饰器@classmethod来标识,高速解释器这是一个类方法。类方法的第一个参数应该是cls。

  • 由哪一个类调用的方法,方法内的cls就是哪一个类的引用。
  • 通过类名调用类方法时,不需要传递cls参数。
  • 在方法内部,可以通过cls.访问类的属性,也可通过cls.访问其它的类方法。
class Tool(object):
    count = 0
    @classmethod
    def show_tool_count(cls):
        print("创建的实例化的对象个数为:",cls.count)
    def __init__(self,name):
        self.name = name
        Tool.count +=1
t1 = Tool("first")
t2 = Tool("second")
t3 = Tool("third")
Tool.show_tool_count()

python中的静态方法?

既不需要访问类的方法,也不需要访问对象的方法。

class Tool(object):
    count = 0
    @staticmethod
    def run():
        print("什么事也不想做")
    def __init__(self,name):
        self.name = name
        Tool.count +=1
t1 = Tool("first")
t2 = Tool("second")
t3 = Tool("third")
Tool.run()

静态方法不需要传入第一个参数来标识,同时在方法上用staticmethod来修饰。同时不需要创建类的实例,可以直接通过类名来访问该方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【python实现卷积神经网络】Dropout层实现

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch

    绝命生
  • 【自然语言处理】利用LDA对希拉里邮件进行主题分析

    然后取出ExtractedBodyText的那一列,对每一行email进行噪声过滤,并返回一个对象:

    绝命生
  • 【python实现卷积神经网络】激活层实现

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch

    绝命生
  • 黑客过境,币圈难宁

    猎云注:在黑客攻击后倒闭的项目不绝如缕。币圈是一块无人管的戈壁地。在币圈尚无明确法律监管的情况下,这些黑客攻城掠地,侵占一座又一座城池。无论是矿池、钱包、交易所...

    周俊辉
  • 细思恐极,黑客到底可以厉害到什么程度?

    其实黑客的含义在计算机起初阶段就是代表程序员的意思,所以讲道理程序员都是黑客,但是随着时代的发展和变化,黑客的含义才演变成了现在大家心中的那个“黑客”的意思。

    IT派
  • 从「胖瘦终端」谈边缘网络下的融合趋势

    网络和终端在目前在通讯不断演进和应用不断涌现的发展趋势下,已经逐渐脱离了传统的二元体系,有的网络功能在下沉,而终端的部分功能逐步也在上移。我们可以看到,在某些特...

    边缘计算
  • 一篇文章带你快速弄清楚什么是终端

    首先我们来弄清楚什么是终端(terminal)。按照百度百科的解释是:“经由通信设施向计算机输入程序和数据或接收计算机输出处理结果的设备。” 听起来似乎有点晦涩...

    Coding十日谈
  • 14 | 网络安全:和别人共用Wi-Fi时,你的信息会被窃取吗?

    你平时使用手机连接无线网络的时候,一定看到过这样的安全提示:不要连接陌生的 Wi-Fi。也一定看过很多这样的报道:某先生 / 女士因为使用了陌生的 Wi-Fi,...

    斑马
  • write_first/read_first/no_change什么区别

    无论是用XPM_MEMORY还是IP Core的方式调用各种类型的RAM(单端口、简单双端口或真双端口),都会遇到这样一个参数:Write Mode。该参数有三...

    Lauren的FPGA
  • 小程序UI库推荐

    GitHub:https://github.com/Tencent/weui-wxss/

    薛定喵君

扫码关注云+社区

领取腾讯云代金券