编程思想
编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法
三种编程思想:
面向过程编程 - 会基本语法和逻辑
函数式编程 - 会基本的语法和逻辑还会函数
面向对象编程 -会基本语法和逻辑、函数、类和对象
认识类和对象
什么是类、什么是对象
类 - 类是拥有相同功能和相同属性的对象的集合.(是一个抽象概念)
对象 -对象是类的实例、是类的具体表现 (具体的)
从生活的角度:如果人是类,小明就是对象
定义类(创建类)- 用代码来描述清楚这个类是到底拥有哪些相同的功能和相同的属性的对象的集合
功能: 函数
属性: 属性(保存数据的变量)
语法:
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来提供。
作业
-
定义一个狗类和一个人类:
狗拥有属性:姓名、性别和品种 拥有方法:叫唤
人类拥有属性:姓名、年龄、狗 拥有方法:遛狗
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('遛狗')
-
定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积
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
-
定义一个二维点类,拥有属性: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
-
定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
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 '不是外切圆'
-
定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
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