一遇到问题马上想用算法或步骤(逻辑)直接解决问题
使用的工具是:逻辑
一遇到问题马上想到的是有没有一个函数具有解决这个问题的功能,如果有就直接用,没有就自己定义一个函数
使用的工具是:函数
一遇到问题马上想有没有一个对象具有解决这个问题的功能,如果有就直接用,没有就自己创建一个
使用的工具是:函数
类就是拥有相同功能和属性的对象的集合 - 抽象的概念
对象就是类的实例 - 具体的体现
比如:车
类:车
对象:具体的一辆车(比如你家里的那台车,面前的这辆车)
功能:载人,载货(功能就是对象的方法、函数)
属性:车的颜色、排量、座位数等
注意:汽车、自行车、电动车等都不是一个对象,而是车这个类下面的小分类
方法:定义在类里面的函数,用来对类功能进行描述
1)什么是对象方法 怎么定义:直接定义在类中 怎么调用:对象.方法名 特点:自带参数self,用对象调用只有self参数的方法时不需要传参,系统会自动将当前对象传给self(谁调用就指向谁)
# 证明self指向的是当前对象 class Dog: def eat(self): print('狗啃骨头!') print(f'self指向的对象:{self}') d1 = Dog() print(f'd1:{d1}') d1.eat() # 输出结果: """ d1:<__main__.Dog object at 0x00B9D028> 狗啃骨头! self指向的对象:<__main__.Dog object at 0x00B9D028> """ # 可以看到self指向的就是d1这个对象 构造方法就是构造函数,构造函数和类同名,是专门用来创建对象(实例)的函数,python在创建类的时候会自动创建构造函数(系统隐藏了构造函数中除了__init__方法外的部分,对于构造函数,只能修改__init__方法里面的内容) 构造函数使用以下三个步骤实现创建对象的功能:
1)在调用构造函数时自动调用__new__()方法创建对象 2)用创建好的对象调用__init_()方法,对对象进行初始化 3)最后再返回初始化后的对象
""" 构造函数伪代码如下: def Dog(*args, **kwargs): 对象 = 创建对象(调用__new__函数创建对象) 对象.__init__(*args, **kwargs) return 对象 """ class Dog: def eat(self): print('狗啃骨头!') print(f'self指向的对象:{self}') d1 = Dog() # Dog()就是一个构造函数魔法方法:一__开头和一__结尾方法,魔法方法不需要程序员主动调用,系统会自动调用
__init_:
1)每次通过类创建对象时,系统都会自动调用 2)创建对象时构造函数传不传参数传几个参,看__init_后面除了self以外跟了多少个参数 3)如果需要给类创建init方法,保证方法名是__init_,以及方法的性质是对象方法
# 证明__init__方法会被自动调用 class Person: def __init__(self): self.name = '' print('__init__方法被自动调用') def sleep(self): print('人睡觉') print(f'self指向的对象:{self}') p1 = Person() # __init__方法被自动调用 # 在创建对象p1后打印了__init__中print里的内容,证明在创建对象时,系统自动调用了__init__方法 类中的属性分为两种:类属性和对象属性
1)类属性
怎么定义:在类里面方法外面定义 怎么调用:类名.属性名 什么时候用:属性值不会因为对象的不同而不一样时
2)对象属性
怎么定义:以self.属性名的形式存在在__init__方法里 怎么调用:对象.属性名 什么时候用:属性值可能会因为对象的不同而不一样时
# 定义一个类,包含人的姓名、年龄、性别 class Person: def __init__(self, n='', a=12, g='女'): self.name = n self.age = a self.gender = g def show_info(self): return f'name:{self.name}, age:{self.age}, gender:{self.gender}' p1 = Person('小芳') p2 = Person('小丽', 18) p3 = Person('小明', 18, '男') print(p1.show_info()) print(p2.show_info()) print(p3.show_info()) # 输出结果 """ name:小芳, age:12, gender:女 name:小丽, age:18, gender:女 name:小明, age:18, gender:男 """ # 练习:定义一个点类,有属性x坐标/y坐标, 方法:以'x:?,y:?'的形式打印点的信息 # 要求创建点对象的时候可以给坐标赋值,如果不赋值x坐标和y坐标都是0和0 # 添加方法:获取当前点到另外一个点的距离 class Point: def __init__(self, x=0, y=0): self.x = x self.y = y def show_info(self, p): return ((self.x-p.x)**2+(self.y-p.y)**2)**0.5 p1 = Point() p2 = Point(3, 4) result = p1.show_info(p2) print(f'点({p1.x},{p1.x})和点({p2.x},{p2.x})之间的距离是:{result}') # 输出结果 """ 点(0,0)和点(3,3)之间的距离是:5.0 """