Python -- 面向对象:OOP

OOP的设计:
  • 建议在一个模块里编写类,另一个模块去实例化这个类进行调用
  • 设计类的时候,一定要抓住 “行为” 和 “特征”
  • 大多数方法/函数都是为了进行变量处理而存在的

1、实例变量:存在实例的 __dict__ 里面

实例方法中定义的变量,self.params_name

class Student(object):
    
    def __init__(self, name, age, sex):  # 构造方法
        self.name = name  # 实例变量,通过self. 进行调用并赋值
        self.age = age
        sex = sex  # 这个不是实例变量,只是当前方法的局部变量,如果不被其他实例方法调用,可以考虑这么定义
2、类变量:存在类的 __dict__ 里面

定义在类中的变量,一般与实例无关,才设计成类变量

class Student(object):
    s_sum = 0  # 类变量,OOP设计的时候,跟实例无关的变量可以当作类变量

3、实例方法:

定义在类中的方法,可以理解为处理实例变量的方法,约定俗成形参为 self

class Student(object):

    def __init__(self, name, age, sex):  # 构造方法
        self.name = name  # 实例变量,通过self. 进行调用并赋值
        self.age = age
        sex = sex  # 这个不是实例变量,只是当前方法的局部变量,如果不被其他实例方法调用,可以考虑这么定义

    def do_homework(self):
        print('我是个实例方法,我传入self参数,这个self只是约定俗成的,你可以定义为其他名字,但是不建议这么做')
        print(self.__class__.s_sum)

4、类方法:

用于处理类变量的方法,加了@classmethod装饰器,约定俗成形参为 cls;如果不加此装饰器,就算形参是 cls 也不是类方法

class Student(object):
    s_sum = 0  # 类变量,OOP设计的时候,跟实例无关的变量可以当作类变量

    @classmethod
    def do_s_sum(cls):
        print("我是个类方法,顾名思义,我是类变量的加工器,我传入一个cls参数,"
              "这个名字也是约定俗成的,你也可以定义为其他的,但并不建议这么做")
        cls.s_sum += 1
        print("Now student's number is: ".format(cls.s_sum))

5、静态方法:

加了@staticmethod装饰器的方法,无默认形参,与类和实例无关的时候,将此方法定义为静态方法,由于静态方法和类方法可以达到相同的效果,一般不建议使用静态方法

class Student(object):

    @staticmethod
    def other_method(x, y):
        print("我跟类和实例没有关系,我更类似于一个全局方法,只不过放在类里显得更OO")

6、访问类变量的两种方法:

6.1、实例中访问类变量(不推荐)

class Student(object):
    s_sum = 0  # 类变量,OOP设计的时候,跟实例无关的变量可以当作类变量

    def do_homework(self):
        print('我是个实例方法,我传入self参数,这个self只是约定俗成的,你可以定义为其他名字,但是不建议这么做')
        print(self.__class__.s_sum)  # 实例中访问类变量

6.2、类方法中访问与操作类变量(推荐

class Student(object):
    s_sum = 0  # 类变量,OOP设计的时候,跟实例无关的变量可以当作类变量

    @classmethod
    def do_s_sum(cls):
        print("我是个类方法,顾名思义,我是类变量的加工器,我传入一个cls参数,"
              "这个名字也是约定俗成的,你也可以定义为其他的,但并不建议这么做")
        cls.s_sum += 1  # 类方法中操作类变量,这样更符合规范
        print("Now student's number is: ".format(cls.s_sum))

最后感谢慕课网七月老师,他讲解的《Python3 入门与进阶》视频课程中 OOP这一块的内容是我听过讲解相当透彻的。

感谢大神。微笑

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值