python3-类、实例对象、属性和方法

系列文章目录

一、类的定义与实例化对象

python之中,一切皆对象!

  • 定义类:

    使用def关键字定义方法,使用class关键字定义类,类名使用大驼峰命名法

    下面是一个学生类的例子:

    class Student(object):  
        classroom = '111'
        address = '成都' 
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def print_age(self):
            print('%s: %s' % (self.name, self.age))
            
        print('类的定义完成')  # 会在类的定义阶段执行
    

    涉及的语法比较多,先有个印象,后面会详细讲到:

    • classroom、address写在类中,是类属性
    • name、age写在__init__方法中,属于实例属性
    • __init__方法又叫初始化方法,在实例化对象的时候,会自动执行。
    • self代表实例化后的对象本身,它不是关键字,而是约定俗成的写法。
    • print_age是一个实例方法
    • Student类没有父类,默认继承object类,它是Python3中所有类的父类。
  • 实例化对象的格式:

    实例化对象就是调用类产生一个对象,按照初始化方法的需要,传入参数:

    zhang = Student("张三", 23)  # 实例化一个对象,保存在变量zhang中
    li = Student('李四', 24)  # 实例化一个对象,保存在变量li中
    

二、实例属性和类属性

  • 实例属性:

    • 含义:

      实例属性指的是实例对象本身拥有的属性,定义在初始化方法中,不同的实例对象所拥有的实例属性的值都不同。

      比如:上述学生类例子中,zhang和li是两个不同的对象,所以他们的实例属性name、age的值都不相同。

    • 访问方法:

      一定要先实例化,再通过实例对象来访问:

      zhang.name  # 返回:张三
      li.name  # 返回:李四
      
  • 类属性:

    • 含义:

      类属性是所有实例对象共有的属性,不受具体对象的影响;定义在类内部、方法外部。

      比如:上述学生例子中,classroom和address就是类属性。

    • 访问方法:

      不一定要实例化,可以直接用类来访问,也可以用实例对象来访问:

      Student.classroom  # 返回:111
      Student.address   # 返回:成都
      li.classroom  # 返回:111
      zhang.address  # 返回:成都
      

    注意:为了避免混淆,类属性的访问和修改,应该通过类来完成!

  • 属性的查找顺序:

    访问属性时,解释器会先在实例属性列表中查找,找不到就去类属性列表中找。

  • 添加和修改属性:

    只需要使用赋值语句,属性已存在就修改值,不存在就创建属性

    li.age = 20 # age已存在,由24修改为20
    li.gender = 'male'  # gender不存在,创建gender属性
    

三、类的方法

类的方法包括实例方法、静态方法、类方法三种,它们都定义在类中:

  • 实例方法:

    实例方法由实例调用,至少包含一个self参数,且为第一个参数。self代表实例对象本身,在执行实例方法时,会自动将调用该方法的实例赋值给self。

    比如:学生类中的print_age就是实例方法。

    调用:实例名.实例方法

  • 静态方法:

    静态方法由类调用,无默认参数。在方法的定义上方加上@staticmethod,就构成了实例方法。

    调用:类名.静态方法(建议)或者实例名.静态方法

    class Foo(object):
    
        @staticmethod
        def static_method():
            pass
    
    Foo.static_method()
    
  • 类方法:

    类方法由类调用,采用@classmethod装饰,至少传入一个cls(代指类本身,类似self)参数。执行类方法时,自动将调用该方法的类赋值给cls。

    调用:类名.类方法(建议)或者实例名.静态方法

    class Foo(object):
    
        @classmethod
        def class_method(cls):
            pass
    
    Foo.class_method()
    

下一篇

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花_城

你的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值