day17面向对象基础总结

本文详细介绍了编程中的面向对象思想,包括面向过程、函数式和面向对象编程的区别。重点讲解了面向对象编程中的类和对象概念,以及如何定义类、创建对象。文中还阐述了类的方法(对象方法、类方法、静态方法)以及构造函数的使用。此外,通过实例展示了如何定义狗、人、矩形、二维点和圆等类,并实现了相应的方法。这些实例帮助理解如何在实际编程中应用面向对象的思想。
摘要由CSDN通过智能技术生成
编程思想

编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法
三种编程思想:
面向过程编程 - 会基本语法和逻辑
函数式编程 - 会基本的语法和逻辑还会函数
面向对象编程 -会基本语法和逻辑、函数、类和对象

认识类和对象

什么是类、什么是对象
类 - 类是拥有相同功能和相同属性的对象的集合.(是一个抽象概念)
对象 -对象是类的实例、是类的具体表现 (具体的)
从生活的角度:如果人是类,小明就是对象
定义类(创建类)- 用代码来描述清楚这个类是到底拥有哪些相同的功能和相同的属性的对象的集合
功能: 函数
属性: 属性(保存数据的变量)
语法:
class 类名:
类的说明文档
类的内容(包括方法和属性)
注解:方法 - 定义在类中的函数
属性 - 定义在类中变量
说明:
class - 关键字;固定写法
类名 - 由程序员自己命名,必须符合名要求和规范
要求:是标识符;不能是关键字
规范:见名知义;采用驼峰式命名(由多个单词组成,单词间通过首字母大写来区分),第一个字母大写;
不使用系统的函数名、类名或者模块名
类的说明文档 - 本质就是多行注释
类的内容 - 由方法和属性组成
方法包括:对象方法、类方法和静态方法三种
属性包括:类属性(字段)和对象属性两种
创建对象:
对象是类的实例,创建类的对象必须通过类来创建。
语法:
对象 = 类名()

方法

类中的方法分为三种:对象方法、类方法、静态方法
对象方法
怎么定义:直接定义在类中的函数就是对象方法
怎么调用:通过对象来调用 - 对象.方法
特点:用对象调用对象方法的时候,参数self不需要传参,系统会自动将当前对象传给self(谁去调用谁就是当前对象)
类方法
怎么定义:定义函数前加@classmethod
怎么调用:通过类来调用 - 类.类方法()
特点:参数cls不需要传参,系统会自动将当前类传给cls
静态方法
怎么定义:定义函数前加@staticmethod
怎么调用:通过类来调用 - 类.静态方法()
特点:没有特点
创建A的对象
用对象调用对象方法
a2.func1()
用类调用类方法
A.func2()
用类调用静态方法
A.func3()

构造函数

构造函数() - 名字和类名一样,专门用来创建对象的函数就是构造函数
Python中创建类的时候,系统会自动为我们创建这个类的构造函数
魔法方法的特点
方法名是__开头并以__结尾
不需要主动调用,在特定事件被触发后系统会自动调用
__init__方法
当通过类创建对象的时候,类中__init__的方法会自动调用
每次通过类创建对象的时候,类中的__init__都会被自动调用
通过类创建对象的时候需不需要参数,需要几个参数,由这个类中的__init__决定。(看__init__除了self以外有没有额外的参数)
属性分为:对象属性和类属性(字段)

类属性

1)怎么定义: 直接在类中定义一个变量,这个变量就是类属性
2)怎么使用: 通过类来使用 - 类.类属性
3)什么时候用: 属性不会因为对象不同而不一样就将这个属性定义成类属性
2对象属性
1)怎么定义: 以’self.属性名=值’的形式定义在__init__方法中
2)怎么使用: 通过对象来使用 - 对象.对象属性
3)什么时候用:属性会因为对象不同而不一样就将这个属性定义成对象属性
4)init_方法的扩展
1)如果类需要对象对象属性,就需要在类中添加__init
_
2)可以通过在__init__中添加参数来实现创建对象的时候直接给属性赋值

选择

如果实现函数的功能需要对象(对象属性)就用对象方法;如果需要类就用类方法;如果都不需要就用静态方法
在实现对象方法的功能的时候如果需要的数据是对象相关数据,那么这个数据就由self来提供。

作业
  1. 定义一个狗类和一个人类:

    狗拥有属性:姓名、性别和品种 拥有方法:叫唤

    人类拥有属性:姓名、年龄、狗 拥有方法:遛狗

    class Dog:
        def __init__(self, name, gard, var):
            self.name = name
            self.gard = gard
            self.var = var
    
        def dog(self):
            print('叫唤')
    
    
    class People:
        def __init__(self, name, age, dog):
            self.name = name
            self.age = age
            self.dog = dog
    
        def p1(self):
            print('遛狗')
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rectangle:
        def __init__(self, long, width):
            self.long = long
            self.width = width
    
        def area(self):
            return self.width * self.long
    
        def circumference(self):
            return self.width * 2 + self.long * 2
    
  3. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Dot:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def distance(self, x1, y1):
            return ((self.x-x1)**2 + (self.y-y1)**2)**0.5
    
  4. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:
        ip = 3.14
    
        def __init__(self, r, x, y):
            self.r = r
            self.x = x
            self.y = y
    
        def area(self):
            return Circle.ip * self.r ** 2
    
        def circumference(self):
            return Circle.ip * 2 * self.r
    
        def cot(self, r1, x1, y1):
            if r1 + self.r == ((self.x - x1) ** 2 + (self.y - y1)**2)**0.5:
                return '是外切圆'
            else:
                return '不是外切圆'
    
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Line:
        def __init__(self, x, y, x1, y1):
            self.x = x
            self.y = y
            self.x1 = x1
            self.y1 = y1
    
        def line(self):
            return ((self.x - self.x1)**2 + (self.y - self.y1))**0.5
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值