python之类方法,静态方法

  • 魔术方法
class Test:
    # 魔术方法
    def __init__(self, nickname, age):
        print('-----魔术方法,只要创建了对象就会自动调该方法')
        self.nickname = nickname
        self.age = age

c=Test('花花',5)

运行结果: 

-----魔术方法,只要创建了对象就会自动调该方法
  •  普通方法
class Test:
    #普通方法
    def general_method(self):
        print('-----普通方法')
        print(self) #self为对象,self=t


t=Test() #创建一个对象t
print(t)
t.general_method()

运行结果:

<__main__.Test object at 0x000001CDBBBFF978>
-----普通方法
<__main__.Test object at 0x000001CDBBBFF978>
  • 类方法
class Test:
    # 类方法
    @classmethod
    def class_method(cls):
        print('-----类方法,不用创建对象,直接可调用')
        print(cls)  # cls为类,cls=Cat

print(Test)
Test.class_method()

运行结果:

<class '__main__.Cat'>
-----类方法,不用创建对象,直接可调用
<class '__main__.Cat'>
  • 静态方法:
class Test:
    #静态方法
    @staticmethod
    def static_method():
        print('-----静态方法,不用创建对象,直接可调用')

Test.static_method()

 

类方法的特点
1.定义需要依赖装饰器@classmethod
2.类方法中参数不是一个对象,还是类
3.类方法中只可以使用类属性,不能使用self.XXX属性
4.类方法中不可使用普通方法,可使用类方法和静态方法
类方法的功能:
可以实现在对象创建之前,完成一些动作
静态方法的特点(很类似类方法)
1.需要装饰器staticmethod
2.静态方法无需传递参数(cls,self),不依赖类和对象
3.只可以使用类属性,不能使用self.XXX属性
4.不可使用普通方法,可使用类方法和静态方法

  • 各种方法以及属性之间的调用关系
class Cat:
    age=2   #类属性
    __name='peter'  #私有变量,只能在内部访问

    #魔术方法
    def __init__(self,nickname,age):
        print('-----魔术方法')
        self.nickname=nickname
        self.age=age

    #普通方法
    def eat(self,food):
        print('-----普通方法')
        print('可使用类属性,私有变量,以及self属性',Cat.age,Cat.__name,self.nickname)
        print('可以使用类方法,静态方法')
        Cat.class_method()
        Cat.static_method()
        print('{}喜欢吃{}'.format(self.nickname,food))

    #类方法
    @classmethod
    def update_name(cls):
        print('-----类方法')
        print('可以使用类属性,私有变量,不可使用对象的属性',cls.age,cls.__name) #可访问类属性,私有变量
        # print(self.nickname)  #报错,不可使用对象的属性
        print('可以使用类方法,静态方法,不可使用普通方法')
        cls.class_method() #可使用类方法
        cls.static_method()#可使用静态方法
        # Cat.eat(self,'fish')  #报错,类方法不可使用普通方法
        cls.__name='招财猫'
        print('小猫改名为{}了'.format(cls.__name))#类里面可修改私有变量

    # 静态方法
    @staticmethod
    def update_age():
        print('-----静态方法')
        print('可以使用类属性,私有变量,不可使用对象的属性', Cat.age, Cat.__name)  # 可访问类属性,私有变量
        # print(self.nickname)  #报错,不可使用对象的属性
        print('可以使用类方法,静态方法,不可使用普通方法')
        # Cat.eat(self,'fish')  #报错,类方法不可使用普通方法
        Cat.class_method()  # 可使用类方法
        Cat.static_method()  # 可使用静态方法
        Cat.age=2 # 可修改类变量
        print('小猫今年{}岁了'.format(Cat.age))

    @classmethod
    def class_method(cls):
        print('这是一个类方法')

    @staticmethod
    def static_method():
        print('这是一个静态方法')

c=Cat('花花',5) #创建一个对象
c.eat('老鼠') #调普通方法
Cat.update_name() #调类方法
Cat.update_age() #调静态方法
# print(Cat.__name,c.__name) #无法访问私有变量,报错

运行结果:

-----魔术方法
-----普通方法
可使用类属性,私有变量,以及self属性 2 peter 花花
可以使用类方法,静态方法
这是一个类方法
这是一个静态方法
花花喜欢吃老鼠
-----类方法
可以使用类属性,私有变量,不可使用对象的属性 2 peter
可以使用类方法,静态方法,不可使用普通方法
这是一个类方法
这是一个静态方法
小猫改名为招财猫了
-----静态方法
可以使用类属性,私有变量,不可使用对象的属性 2 招财猫
可以使用类方法,静态方法,不可使用普通方法
这是一个类方法
这是一个静态方法
小猫今年2岁了
总结:
类方法 静态方法
不同点:
1.装饰器不同
2.类方法是有参数的,静态方法是没有参数的
3.类方法可以使用类名或cls调用访问,静态方法只能通过类名调用访问
相同:
1.只能访问类的属性和方法,对象的无法访问的
2.都可以通过类名调用访问
3.都可以在创建对象之前使用,不依赖于对象

普通方法 与 类方法,静态方法 的区别:
1.没有装饰器
2.普通方法永远依赖于对象,因为每个普通方法都有一个self.self即对象
3.只有创建了对象才可以调用普通方法
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值