python的实例方法 类方法 静态方法笔记

名称定义方法权限调用方法
实例方法第一个参数必须是实例,一般命名为self可以访问实例的属性和方法,也可以访问类的实例和方法一般通过实例调用,类也可以调用
类方法使用装饰器@classmethod修饰,第一个参数必须是当前类的对象,一般命名为cls可以访问类的实例和方法类实例和类都可以调用
静态方法使用装饰器@staticmethod修饰,参数随意,没有self和cls不可以访问类和实例的属性和方法

实例对象和类对象都可以调用

 

 

下面修改类Stu的定义来展示这三种方法的区别

class Stu:#Stu类
    school = "湘北高中" #类的属性
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def play_basketball(self):
        print("{name} 正在打篮球".format(name=self.name))
    
    @classmethod
    def sport(cls):#类方法,使用装饰器@classmethod修饰,第一个参数必须是当前类的对象,一般命名为cls
        print("{school}的同学都喜欢篮球".format(school=cls.school))
    
    @staticmethod
    def clean():#静态方法,使用装饰器@staticmethod修饰,参数随意,没有self和cls
        print("打扫教室卫生")
        
stu = Stu("樱木花道",17)
stu.play_basketball()          #通过实例调用实例方法
Stu.play_basketball(stu)       #通过类调用实例方法

Stu.sport()                    #通过类调用类方法
stu.sport()                    #通过实例调用类方法

Stu.clean()                    #通过类调用静态方法
stu.clean()                    #通过实例调用静态方法


print(stu.school)              #通过实例访问类属性
stu.school = '山王工业'        #只是增加了一个实例属性,类属性不会被修改
print(Stu.school)              #通过类访问类属性

输出如下

在面向对象的设计理念中,方法必定属于某一个类,如果方法不属于某个类,那么它早就是函数了,就回归到了面向过程编程。方法属于某个类,但这个方法可能不会访问实例和类的任何属性或其他方法,对于这种方法,我们就应该把他设计成静态方法。

还有一种可能,一个方法会访问到类的属性,就像本实例中的sport方法,整个湘北高中的学生都喜欢篮球,这个方法就不是某个学生所特有的,而是整个类所拥有的一个方法,那么就需要把它设计成类方法。school就是类属性,既然类有这个属性,那么类实例化出来的对象也自然拥有这个属性,通过类和实例都可以访问到这个属性,但是要注意,这个属性是类的,因此不能通过实例化对它进行修改。

 

 

参考链接

http://www.coolpython.net/python_primary/oop/class.html

 

注:这是第一次接触面向对象编程,这篇论文作为开始的记录吧,这是目前对类的理解,后面对于类的理解继续在此基础上进行添加

时间:2020年8月24日21:18:23

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值