从0.1开始学Python——[23]

从0.1开始学Python——[23]

类的属性和方法的总结。

属性的特点

类属性实例对象和类对象都能用,但是之前学的,实例修改属性只对实例有效,只有类对象修改属性才对类和新实例对象(没单独修改过属性的实例)都有效。

class Shiyan():
    leishuxing = 6


sy = Shiyan()
sy.leishuxing = 7
print(Shiyan.leishuxing)
print(sy.leishuxing)
Shiyan.leishuxing = 9
sy1 = Shiyan()
print(Shiyan.leishuxing)
print(sy.leishuxing)
print(sy1.leishuxing)
6
7
9
7
9

实例对象专属于实例,类对象不能用。

class Shiyan():
    leishuxing = 6

    def __init__(self):
        self.shilishuxing = '⑨'

print(sy.shilishuxing)
print(Shiyan.shilishuxing)
Traceback (most recent call last):
  File "D:/4classcode/4classcode/lianxi.py", line 830, in <module>
    print(Shiyan.shilishuxing)
AttributeError: type object 'Shiyan' has no attribute 'shilishuxing'

方法的特点

实例方法类和实例都能用。实例方法的标识就是以self为第一个形参传输的方法。但要注意,之前也讲到,实例调用方法的时候会默认将对象本身当实参传入。但是用类调用的时候不会,需要自己写,输入实参就是对象
实例用实例方法:

class Shiyan():
    leishuxing = 6

    def __init__(self):
        self.shilishuxing = '⑨'

    def shilifangfa(self):
        print('实例方法')

sy = Shiyan()
sy.shilifangfa()
实例方法

类用实例方法但不传参:

Shiyan.shilifangfa()
Traceback (most recent call last):
  File "D:/4classcode/4classcode/lianxi.py", line 835, in <module>
    Shiyan.shilifangfa()
TypeError: shilifangfa() missing 1 required positional argument: 'self'

类用实例方法且传参:

Shiyan.shilifangfa(sy)
实例方法

类方法需要在类里面定义,同时还要用@classmethod装饰。类方法也有一个默认传参,对应实例方法的self,在形参里面自动叫做cls。cls的类型取决于类方法在哪个类里面定义。注意类方法也是类和实例都能用,且不需要自己传实参。

class Shiyan():
    leishuxing = 6

    def __init__(self):
        self.shilishuxing = '⑨'

    def shilifangfa(self):
        print('实例方法')

    @classmethod
    def leifangfa(cls):
        print('类方法',cls)

sy = Shiyan()
Shiyan.leifangfa()
sy.leifangfa()
类方法 <class '__main__.Shiyan'>
类方法 <class '__main__.Shiyan'>

参数cls在Shiyan()类里面定义,所以是Shiyan类的对象。
静态方法是一种用@staticmethod装饰的方法,而且不需要任何的形参,不用self啊cls啊之类的。

class Shiyan():
    leishuxing = 6

    def __init__(self):
        self.shilishuxing = '⑨'

    def shilifangfa(self):
        print('实例方法')

    @classmethod
    def leifangfa(cls):
        print('类方法',cls)

    @staticmethod
    def jingtaifangfa():
        print('静态方法')

sy = Shiyan()
Shiyan.jingtaifangfa()
sy.jingtaifangfa()
静态方法
静态方法

之前学到,函数和方法的区别就是有没有默认传参,所以从这个意义上讲,静态方法其实属于函数,基本上和类没啥关系,只是保存在这个类里面而已。有关的地方就是需要借助**.静态方法()的形式调用,而不能像函数一样直接调用**。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值