11.1 给大家介绍对象
封装的概念:列表封装数据-----函数封装语句-----对象封装数据和代码
描述对象:特征+行为
11.2 对象=属性+方法
将人写出代码,如下:
class Ren:
#属性
color="黄色"
legs=2
weight=100
#方法
def pa(self):
print("你看,我爬起来了")
def 走(self):
print("你看,我走起来了")
def pao(self):
print("你看,我跑起来了")
def chi(self):
print("你看,我开吃了")
def shui(self):
print("你看,我已经睡下了")
#---以上只是定义好了模子(类),还没开始量产。必须将类实例化,才能引用实例 ----
tw=Ren()
#---已经通过类创建了对象,下面进行对象的操作
print(tw.color)
print(tw.pao())
封装=信息隐蔽技术 属性-变量 方法-函数
==================列表排序====================
代码如下
list1=[2,1,4,9,5]
list1.sort()
print(list1)
-------------
[1,2,4,5,9]
#如果想要列表末尾加个10
list1.append(10)
----------------------
[1,2,4,5,9,10]
======================== 列表即对象,提供了若干方法,方法的实现方法不知道=封装。
面向对象的特征=封装+继承+多态
11.3面向对象编程
11.3.1 self是什么 类是建设图纸,对象是房子,self就是门牌号。
通过例子来感受:
class Ball:
def setName(self,name):
self.name=name
def kick(self):
print("我叫%s,嗷~谁踢我?!"%self.name)
a=Ball()
a.setName("捣蛋头")
b=Ball()
b.setName("飞机头")
c=Ball()
c.setName("火箭头")
print(a.kick())
print(b.kick())
print(c.kick())
-----------------------------------------------------
我叫捣蛋头,嗷~谁踢我?!
None
我叫飞机头,嗷~谁踢我?!
None
我叫火箭头,嗷~谁踢我?!
None
========================小结==================================
将代码的print() 去掉即可 改成 return
是因为python函数使用return返回值,如果不用
return, 而用print输出值,这个函数默认还有一个返回值为None
=================================================================
11.3.2 你听说过Python的魔法方法么?构造函数__init__()
作用:在由类创建对象的时候,自动调用该方法,对对象进行初始化设置。
class Ball:
def __init__(self,name):
self.name=name
def kick(self):
return ("我是%s,来打我啊"% self.name)
b=Ball("tan")
print(b.kick())
----------------------------
我是tan,来打我啊
============还可以进行初始设置,没传入也不报错 __init__(self,name="A"):
11.3.3 公有和私有 Python里没有关键字进行修饰
class Person:
name="捣蛋头"
p=Person()
print(p.name)
--------------
捣蛋头
===================Python机制name mangling,变私有只需要加“__”两个下划线
class Person:
__name="捣蛋头"
p=Person()
print(p.name)
-------------
报错
AttributeError: 'Person' object has no attribute 'name'
那如何才能访问呢?
class Person:
__name = "捣蛋头"
def getNanme(self):
return self.__name
p=Person()
print(p.getNanme())
====================================本质上,只是改了变量名。代码如下
class Person:
__name="捣蛋头"
p=Person()
print(p._Person__name)
---------------------
捣蛋头
=====================================
Python的私有机制其实是伪私有。
11.4 继承
鱼类,假如进行细分,有很多种类,能不能不用每次都去重新定义鱼类呢?大部分鱼
的属性和方法都是相似的,如果有一种机制可以使得相似的东西自动传递,快捷多了。
继承 可以实现。语法很简单:
class 类名(被继承的类):
...
被继承的类称为基类,父类或者超类;继承者称为子类,子类可以继承父类任何属性、方法
举例如下:
class Zuzong:
def hello(self):
print("正在调用父类方法。。。")
class Haizi(Zuzong):
pass
p=Zuzong()
p.hello() #父类实例对象调用方法
s=Haizi()
s.hello() #子类实例对象调用 继承父类的 方法
---------------------
正在调用父类方法。。。
正在调用父类方法。。。
====================================================
如果子类定义与父类同名的方法或者属性,则会自动【覆盖】父类对应的方法或属性。
class Fulei:
def hello(self):
print("say hello!")
class Zilei(Fulei):
def hello(self):
print("八嘎亚路")
z=Zilei()
z.hello()
-----------------
八嘎亚路