我们先用:面向过程,的思路来看看:
# 代码01 bird_1 = {'name':'Woodpecker','eat':'worm'} bird_2 = {'name':'eagle','eat':'rabbit'} # 如果说明啄木鸟和老鹰吃虫子和兔子,面向流程的思维方式: print('%s eat %s' % (bird_1['name'], bird_1['eat'])) print('%s eat %s' % (bird_2['name'], bird_2['eat'])) # %s 是格式化输出字符串的方法 # 使用函数 def bird_eat(bird): print('%s eat %s' % (bird['name'], bird['eat'])) bird_eat(bird_1) bird_eat(bird_2)
output:
Woodpecker eat worm eagle eat rabbit Woodpecker eat worm eagle eat rabbit
# 代码02 class Bird(): '''鸟儿吃什么食物的一个类测试''' def __init__(self, name, eat): '''初始化属性name和eat''' self.name = name self.eat = eat def print_eat(self): '''鸟儿吃什么东西的方法''' print(self.name.title() + ' eat ' + self.eat.title()) bird_1 = bird('Woodpecker', "worm") bird_2 = bird('eagle', "rabbit") bird_1.print_eat() bird_2.print_eat()
output:
Woodpecker eat Worm Eagle eat Rabbit
类的声明语法是首字母大写;
三组引号是文档说明的格式;
从构思鸟儿吃什么到定义各个变量和函数的过程是基于对象思维实现的,即是面向对象;
类: 就像是描述某个对象的设计图纸,是描述对象共性属性和方法的集合;
方法:类中的函数;
属性:类的共性变量
init方法是特殊的函数(init前后有个下划线,最后一个括号),每次根据类创建新的实例的时候,都会运行它;
根据类创建实例这句话的意思是:我们创建的类是具有某些共性的对象,如果我们要具体对一个对象通过调用类来实现我们想要的结果,这一具体的一次过程就是一个实例;
我们定义init方法的时候,用了self、name和eat三个形参;
所谓形参,就是定义类中方法的时候写的参数,区别于实参,实参是对类实例化的过程中传递的实际使用的参数;
# 代码03 class Test(): def Name(self, name): self.name = name def who(self): print('我是 %s ,你好!' % self.name) a = Test() # 标记01 a.Name('test01') a.who() class Test2(object): def __init__(self, name): # 标记02 self.name = name def who(self): print('我是 %s ,你好!' % self.name) b = Test2('test02') b.who() class Test3(): def __init__(self): self.a = '没有self就用不了c.a了哦,你瞅啥,瞅你咋滴,你去了self试试看!' c = Test3() print(c.a)
output:
我是 test01 ,你好! 我是 test02 ,你好! 没有self就用不了c.a了哦,你瞅啥,瞅你咋滴,你去了self试试看!
我们再看03这个代码:
Test和Test2是类名,括号里面的是默认的对象(object或空),# 标记01就是类的一个实例;
我们使用# 标记01的方式,把类的共性用就是属性提前定义好。
其实类中的方法和普通函数一样,只是多了一个self。加了self就是全局变量,都可以用,不加self的变量,只能具体的函数使用。
Test3例子就是这样的,你可以自己去掉self试试看。
通过前十节课,我们基本上入门了Python的基本技能,后面就是Python的初级应用:使用Python做基础数据分析。
本节练习比较抽象和困难,先思考几遍找到思路,使用面向对象的方法:
构架一个汽车的类,包含的属性有:品牌、车型、年份,每个方法都要有注释,构建一个显示汽车属性的方法(输出的语句每个单词首字母大写),然后调用类中的任意属性显示出来;
另外定义一个更新里程的属性和方法,并禁止里程表往回调。