5.6面向对象

5.6面向对象

1.认识类和对象

1.什么是类,什么是对象

类 - 类是拥有相同功能和相同属性的对象的集合。(是一个抽象的概念)
对象 - 对象是类的实例(是类的具体表现)

2.定义类(创建类) - 用代码来描述出这个类到底拥有那些相同功能和相同属性的对象的集合

功能 - 函数
属性 - 保存数据的变量

语法:
class 类名:
类的说明文档
类的内容(属性、方法) - 方法是指定义在类中函数,属性是指定义在类中的变量
说明:class - 关键字,固定写法
类名: - 由程序员自己命名,必须符合命名要求和规范,要求:是标识符,不能是关键字;
规范:做到见名知义;采用驼峰式命名(由多个单词组成,单词之间用通过首字母大写来区分);
类名首字母大写,不使用系统的函数名,类名或者模块名
类的说明文档 - 本质就是多行注释
类的内容 - 包含方法和属性
方法包括:对象方法、类方法、静态方法
属性包括:类属性(字段)和对象属性

3.创建对象

对象是类的实例,创建对象必须通过类来创建

语法:
对象 = 类名()

类中的方法

1.对象方法

1)怎么定义:直接定义在类中的函数,就是对象方法
2)怎么调用:通过对象来调用 - 对象.对象方法()
3)特点:用对象调用对象方法的时候,参数self不需要传参,系统会自动将当前对象传给self(谁去调用这个方法,当前对象就是谁)

2.类方法

1)怎么定义:定义函数前加@classmethod装饰器
2)怎么调用:通过类来调用 - 类.类方法()
3)特点:参数cls不需要传参,系统会自动将当前类传给cls

3.静态方法

1)怎么定义:定义函数前加@staticmethod装饰器
2)怎么调用:
3)特点:没有特点

class A:
    '''无意义的类'''

    def func1(self):
        print('对象方法')

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

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


# 创建A的对象
a1 = A()

# 用对象调用对象方法
a1.func1()

# 用类调用类方法
A.func2()

# 用类调用静态方法
A.func3()


# 4.类中函数的参数
class B:
    def func1(self, x, y=10):
        print(f'x:{x},y:{y}')

    @classmethod
    def func2(cls, x, *, y, z):
        print(f'x:{x},y:{y},z:{z}')

    @staticmethod
    def func3(x, y=9):
        print(f'x:{x},y:{y}')

构造函数和init方法

1.构造函数 - 函数名字和类名一样,专门用来创建对象的函数

Python中创建类的时候,系统会自动为我们创建这个类的构造函数.

补充:,魔法方法的特点:
不需要程序员主动调用,在特定事件被触发的时候,系统会自动调用

2.__init__方法

当通过类创建对象的时候,类中的__init__方法会被自动调用
每次通过类创建对象的时候,类中的__init__都被自动调用

class Student:
    def __init__(self, x, y):
        print('__init__方法', x, y)

stu1 = Student(10, 20)
stu2 = Student(20, 40)

通过类创建对象的时候需不需要参数,需要几个参数,由这个类中的__init__决定

属性

属性分为,对象属性、类属性(字段)

1.类属性

1)怎么定义:直接在类中定义一个变量,这个变量就是类属性
2)怎么使用:通过类来使用 - 类.类属性
3)什么时候用:如果属性值不会因为对象不同而不一样的时候,就将这个属性定义成类属性

2.对象属性

1)怎么定义:以‘self.属性名 = 值’的形式定义在__init__方法中
2)怎么使用:通过对象来使用 - 对象.对象属性
3)什么时候用:如果属性值会因为对象不同而不一样的时候,就将这个属性定义成对象属性

3.__init__方法的拓展

1)如果类需要对象属性,就需要在类中添加__init__
2)可以通过在__init__中添加参数来实现创建对象的时候,直接给属性赋值

方法的选择

1.选择

如果实现函数的功能需要对象(对象属性)就用对象方法;如果需要类就用类方法;如果都不需要就用静态方法

2.对象方法的使用

class Rectangle:
    def __init__(self, width=0, height=0):
        self.width = width
        self.height = height

    # 在实现对象方法的功能的时候,如果需要的数据是对象相关数据,那么这个数据就由self来提供
    def area(self):
        return self.width * self.height


r1 = Rectangle(10, 20)
r2 = Rectangle(5, 8)
print(r2.area())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值