面向对象:
什么是对象:
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件
在python一切皆对象
面向对象:
面向对象:对函数进行分类和封装
一切面向对象干的事,都可以用函数式编程实现.
类和对象:
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
|
In [60]: print(Person)
<class '__main__.Person'>
In [61]: print(tom)
<__main__.Person object at 0x0456B410> | In [66]: print(type(tom))
<class '__main__.Person'> |
函数式的应用场景 --> 各个函数之间是独立且无共用的数据
面向对象编程,函数之间有共享的数据
三大特征:
封装
将内容封装到某处,
从某处调用被封装的内容
In [67]: tom.age=10
In [69]: tom.age
Out[69]: 10 |
self关键字
对于面向对象的封装来说,其实就是使用构造方法将内容封装到
对象
中,然后通过对象直接或者self间接获取被封装的内容。
class Person:
def __init__(self, name,age):
self.name = name
self.age=age
def show(self):
print(self.name,self.age)
tom = Person("tom",10)
tom.show()
#tom 10
|
继承
1),面向对象中的继承和现实生活中的继承相同
class Animal:
def run(self):
print("可以跑")
def walk(self):
print("可以走")
class Person(Animal):
def __init__(self, name,age):
self.name = name
self.age=age
def walk(self):
super().walk()
print("可以直立行走")
def show(self):
print(self.name,self.age)
tom = Person("tom",10)
tom.run()
tom.walk()
# 可以跑
# 可以走
# 可以直立行走
|
2) 多继承
class Animal:
def run(self):
print("可以跑")
def walk(self):
print("可以走")
class Foo:
def work(self):
print("工作")
class Person(Animal,Foo):
def __init__(self, name,age):
self.name = name
self.age=age
def walk(self):
super().walk()
print("可以直立行走")
def show(self):
print(self.name,self.age)
tom = Person("tom",10)
tom.run()
tom.walk()
tom.work()
|
注意:新式类和经典类是有区别的:查找方法的顺序是不同的:
Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object
class A():
def __init__(self):
pass
def save(self):
print "This is from A"
class B(A):
def __init__(self):
pass
class C(A):
def __init__(self):
pass
def save(self):
print "This is from C"
class D(B,C):
def __init__(self):
pass
fun = D()
fun.save()
经典类的答案: This is from A
新式类的答案: This is from C
作者:刘康
链接:https://www.zhihu.com/question/22475395/answer/133787573
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
大概就是这样的过程:
其中黑色箭头是继承链条,红色是新式类的寻找链条 |
多态:
(⊙o⊙)…python天生就是多态的
推荐博文: http://www.cnblogs.com/wupeiqi/p/4493506.html
多态