python大作战之类方法,类属性,实例对象,实例属性以及被classmehtod和staticmethod装饰器装饰过的方法

好久没更新博客了,近段时间工作太忙,今天和大家一起学习下python中的类方法,类属性,实例对象,实例属性以及被classmehtod和staticmethod装饰器装饰过的方法

1:首先我们知道在定义了类之后,会产生类属性以及类方法,有时在类中还可能定义私有属性,所以对于非私有属性的类属性以及类方法,我们可以使用类对象.类属性或使用实例对象来调用类方法

先上一段代码,我们分析下

class Dog(object):
    money=1000
    def __init__(self,name,age):
        self.name=name
        self.age=age
        self.number=200
    def eat(self):
        print('吃')
    def food(self,food):
        return '我要吃{}'.format(food)
    @classmethod
    def run(cls):
        print('我走了{}米'.format(cls.money))
    @staticmethod
    def walk():
        print('hello world')
d=Dog('张三',18)
d.eat()#这是使用实例对象来调用类方法
d.run()#其实实例对象也能调用被classmethod装饰的类方法
print(d.money)
print(Dog.money)
Dog.run()#这是使用类对象来调用类方法
d.walk()
Dog.walk()
输出分别是:
吃
我走了1000米
1000
1000
我走了1000米
------>
静态方法调用的结果
hello world
hello world
class Person(object):
    money = 20000

    @classmethod
    def test(cls):
        # print('我是test,xx=={}'.format(cls))
        # print('money = {}'.format(cls.money))
        print('我是类方法的test')

    def test(self):
        print('我是实例对象方法的test')

    @staticmethod
    def test():
        print('我是静态方法的test')


p = Person()
p.test()

由上面得出

a:类属性可以通过类对象以及实例对象来访问

b:类属性只能通过类对象来修改,不能通过实例对象来修改

b-1:如果类中定义了类属性以及实例属性的名字一样时,优先调用实例属性的方法

c:使用classmethod来修饰类方法后,对于类方法中的cls,所指的就是类对象

c-1:同时类方法可以被类对象以及实例对象来调用,(一般类方法建议被类对象来调用)

d:使用staticmethod来修饰类方法后,对于静态方法的调用,可以使用类对象以及实例对象

e:类中的私有属性,以及私有方法只能在类的内部使用,不能被实例对象以及类对象在类外边直接调用

f:如果定义了三种函数名字一样的方法。分别是类方法,实例方法,静态方法,那么,在被实例对象调用时,调用最后的方法

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值