python学习笔记之静态方法与类方法

1.对类的理解

class Province(object):
    # 类属性
    country = "中国"

    def __init__(self,name):
        # 实例属性
        self.name = name


# 创建一个实例对象
obj = Province('山东省')
# 直接访问实例属性
print(obj.name)
# 直接访问类属性
Province.country

由上可知,【实例属性需要通过对象访问】【类属性通过类名来访问】,在使用上实例属性和类属性的归属是不同的。(创建一个实例对象就相当于创建了一个新的内存空间,在创建对象时会调用__new__方法用来创建对象,__init__方法用来初始化实例对象。)

2.静态方法

  • 实例方法:由对象调用,至少一个self参数,执行实例方法时,自动将调用该方法的对象赋值给self;
  • 类方法:由类调用,至少一个cls参数,执行类方法时,自动将调用该方法的类赋值给cls;
  • 静态方法:由类调用,无默认参数。
    class Foo(object):
        def __init__(self,name):
            self.name = name
    
        def ord_func(self):
            '''定义实例方法,至少有一个self参数'''
            # print(self.name)
            print('实例方法')
    
        @classmethod
        def class_func(cls):
            '''定义类方法,至少有一个cls参数'''
            print('类方法')
    
        @statimethod
        def static_func():
            '''定义静态方法,无默认参数'''
            print('静态方法')
    
    
    f = Foo("中国")
    # 调用实例方法
    f.ord_func()
    
    # 调用类方法
    FOO.class_func()
    
    # 调用静态方法
    Foo.static_func()

    问题:类方法与实例方法的区别在哪呢??

    • 两者都是函数,当我们在一个类中想要修改类属性时,发现很难修改,我们想要使用obj.country = 'xxxx' 去修改类的属性时,实际上修改的修改的是实例对象中的实例属性,当我们定义一个实例对象时,没有定义实例属性,而去调用该属性时,Python解释器就会自动根据指定的这个属性,去寻找类属性中定义的该属性。而我们想要通过 obj.country = 'xxxx' 去修改类属性,实际上是为实例对象增加了一个实例属性。但是如果我们真的想要修改类属性时,通过 obj.__class__.country = "xxxx" 这种方式就能修改类属性

    • 在上述中,我们看到在类中想要修改类属性时,会十分的麻烦。那么,有没有好的方法帮组我们解决这个问题呢?这时候就需要借助于我们的类方法来实现上述的功能了,通过类方法我们就能直接的修改类属性了。

    • 它们在对象的引用上也有很大的差别,我们在调用类方法时,将类对象的引用传递给类方法;调用实例方法时,将实例对象的引用传递给实例方法

      问题:那么静态方法有啥用呢?

        它与类对象和实例对象无关,这个使用静态方法定义在类里的函数,其实也可以定义在类的外面,但是,当两个类定义了两个同名的函数,去修饰各自的类时,这时候就引发了一个问题,其中一个函数会被另外一个函数所覆盖。因此它的出现实际上就是防止在不同类中出现同名不同函数方法,而对另外一个同名函数进行覆盖,而将此函数定义在类中时,我们又不想解释器给我们默认的传类对象或实例对象的引用,这个时候我们就在该函数前使用 @staticmethod 。我们在类中调用这个不需要传参的方法:self.函数名()  

注意:实例对象能有多个,类对象只能有一个。实例对象可以调用实例方法、类方法、静方法,类对象只能调用类方法、静态方法。

             

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

悠然予夏

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值