什么是类
- 对象是模拟真实世界,把数据和代码都封装在一起
- 类 = 属性 + 方法
一个对象的特征称为“属性”,一个对象的行为称为“方法”
class Turtle:
#Python中的类名约定以大写字母开头
#特征的描述称为属性,在代码层面来看其实就是变量
color = 'green'
weight = '10'
legs = '4'
shell = True
mouth = '大嘴'
#方法实际就是函数,通过调用这些函数来完成某些工作
def climb(self):
print('我正在很努力的向前爬...')
def run(self):
print('我正在飞快的向前跑...')
def bite(self):
print('咬死你咬死你!!!')
def eat(self):
print('有的吃,真满足...')
def sleep(self):
print('困了,睡了,晚安。。。')
- 类是一个对象的属性加方法,需要使用类来创建一个真正的对象,这个对象就称为这个类的一个实例,也叫实例对象
创建一个对象
- 创建一个对象,也叫类的实例化
- 类名后面跟着小括号,与调用函数是一样的,所以在Python中,类名约定用大写字母开头,函数用小写字母开头,这样更容易区分
- 赋值的操作并不是必须的,但如果没有把创建好的实例对象赋值给一个变量,那么这个对象就没有办法使用,因为没有任何引用指向这个实例,最终会被Python的垃圾回收机制自动回收
- 调用对象的方法用.即可
>>> tt = Turtle()#生成一个对象,与调用函数相同,用首字母大写与函数区分开来
>>> Turtle()#直接调用,没有后文引用,会被垃圾回收机制回收
>>> tt.climb()#调用方法
OO(Object Oriented)的特征
- OOP = Object Oriented Program,面向对象编程
- Python就是一种面向对象编程的语言,所以说Python无处不对象
特征1:封装
封装是一种信息隐蔽技术,使得数据更加安全
Python的列表其实就是一个对象,它提供了若干种方法供我们根据需求来调整整个列表,但是列表方法是如何实现的呢?我们并不知道,我们也知道列表对象有哪些变量,这就是所谓的封装,我们只需要知道方法名字,然后调用它实现自己需要的功能即可,具体如何实现我们并不知道
>>> list1 = [2,1,7,5,3]
>>> list1.sort()
>>> list1
[1, 2, 3, 5, 7]
>>> list1.append(9)
>>> list1
[1, 2, 3, 5, 7, 9]
特征2:继承
- 继承是子类自动共享父类之间数据和方法的机制
>>> class Mylist(list):#希望继承list这个列表
pass#占位符,不做任何事情
>>> list2 = Mylist()#把类实例化,生成一个对象,并把对象赋值给变量
>>> list2.append(2)
>>> list2.append(3)#拥有了list.append这个方法
>>> list2.append(7)
>>> list2.sort()
>>> list2
[2, 3, 7]
特征3:多态
- 不同对象对同一方法响应不同的行动
>>> class A:
def fun(self):
print('我是小A')
>>> class B:
def fun(self):
print('我是小B')
>>> a = A()
>>> b = B()
>>> a.fun()
我是小A
>>> b.fun()
我是小B
在这里,大家都调用一个叫fun的方法函数,名字一样的 但是实现不一样
Task
0. 对象中的属性和方法,在编程中实际是什么?
变量和函数
1. 类和对象是什么关系呢?
类和对象的关系就如同模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系
2. 如果我们定义了一个猫类,那你能想象出由“猫”类实例化的对象有哪些?
波斯猫、Kitty
3. 类的定义有些时候或许不那么“拟物”,有时候会抽象一些,例如我们定义一个矩形类,那你会为此添加哪些属性和方法呢?
属性:边长
方法:面积,周长
4. 类的属性定义应该尽可能抽象还是尽可能具体?
尽可能抽象,更符合面向对象的思维
5. 请用一句话概括面向对象的几个特征?
封装 :对外部隐藏对象的工作细节
继承 :子类自动共享父类之间数据和方法的机制
多态:可以对不同类的对象调用相同的方法,产生不同的结果
6. 函数和方法有什么区别?
方法和函数几乎完全一样,但方法默认有一个self参数
7.按照以下提示尝试定义一个 Person 类并生成类实例对象。
属性:姓名(默认姓名为“小甲鱼”)
方法:打印姓名
提示:方法中对属性的引用形式需加上 self,如 self.name
class Person:
name = '小甲鱼'
def printName(self):
print(self.name)
8.按照以下提示尝试定义一个矩形类并生成类实例对象。
属性:长和宽
方法:设置长和宽 -> setRect(self),获得长和宽 -> getRect(self),获得面积 -> getArea(self)
提示:方法中对属性的引用形式需加上 self,如 self.width’
class Rectangle():
width = 4.00
length = 5.00
def getRect(self):
print('这个矩形的长是:%.2f,宽是:%.2f'%(self.length,self.width))
def setRect(self):
print('请输入矩形的长和宽...')
length = float(input('长:'))
width = float(input('宽:'))
def getArea(self):
print(self.length * self.width)