面向对象
python可以实现面向对象的编程。个人对面向对象思想的理解是这样的:计算机发展的还不是那么快的时代,需求相对来说
没有那么复杂,根据需求实现功能即可满足;后期由于互联网的发展,需求越来越复杂,单一地根据过程去开发很容易让人搞
糊涂,所以研究出一套取自于现实中正常思维的开发模式,使代码看起来逻辑清晰。
1 面向对象主要还是由 类 来实现:
class className(object): # 括号中为要继承谁,所有最初定义的类都应从object中继承
pass
2 定义类的属性:
使用 __init__ (左右都是俩下划线)函数,可以接受实例化时输入的参数,作为实例的属性。
class dog(object):
def __init__(self,name):
self.name = name
__init__ 中首个参数为 self ,类似 js 里的 this ,谁调用这个函数,self就指向谁,name接受实例化时的参数,
self.name 绑定name属性,类和实例,方法跟属性都可以用点 . 来绑定。
class dog(object):
def __init__(self,name,age):
self.name = name
self.age = age
gou = dog("狗子",2) # 类的实例化
gou.name >> "狗子"
gou.age >> 2
3 类的方法
所谓类的方法,就是在类里头定义一个函数,函数的首个参数也需要为self
class dog(object):
def wang(self):
print("汪!")
gou = dog()
gou.wang() 》》 "汪!"
# 注意,调用方法时,要加括号。要么就是返回方法的内存地址
4 三个特性
面对对象的三个特性为: 封装,继承,多态。
封装: 应该注意到了,类的定义格式很像函数,将一大堆代码写在类的肚子里,如果有多个对象很多特征相似,可以
把这些特征封装进一个类中。
继承: 类有继承的功能,所谓继承就是从一个类里头实例化一个对象,你没写这个对象的属性方法,这个对象从他的类中
得到了所有的属性方法,可以直接调用。
class dog(object):
def __init__(self)
self.leg = 4
def attack_method(self):
print("the dog is bitting!")
gou = dog() # 实例对象gou 从类 dog 中继承了所有的属性和方法
gou.leg >> 4
gou.attack_method() >> the dog is bitting!
类也能继承,一个类定义的时候,括号中有个object参数,表示从 python 自带的object类中继承相应的属性以及方法。
同样的,也能从其他类中继承属性和方法
class animal(object):
def __init__(self):
self.look = "cute"
class dog(animal):
def looklike(self):
print(self.look)
# 调用了未定义的 look 属性
gou = dog()
gou.looklike() >> cute
gou.look >> cute # dog中未定义的属性
多重继承,有时候一个对象不仅有这个类的特性,还有那个类的特性,此时可以可以定义一个类,继承多个类。
class animal(object):
def __init__(self,color):
self.color = color
class dog(object):
def __init__(self,name):
self.name = name
def wang(self):
print("汪!")
class village_dog(animal, dog):
pass # 从animal和dog中继承
gou = village_dog("黄色")
gou.color >> "黄色"
gou.wang() >> "汪!"
# 要注意的是,animal和dog中都有 init 函数,init函数只会执行一个,就近选择,如果自身有用自己的,自己没,用参数里靠前的那个类的
多态:
多态这个特性是理所当然的,A类继承自B类,B类有继承自C类,C类甚至继承自D和E类。则从A类实例化后的对象,
判断类型时,可以是 A,B,C,D,E 类,针对这些类定义的函数他都能用,这就是多态。
class animal(object):
def __init__(self,color):
self.color = color
class dog(object):
def __init__(self,name):
self.name = name
def wang(self):
print("汪!")
class village_dog(animal, dog):
pass # 从animal和dog中继承
gou = village_dog("sdfa")
isinstance(gou,dog) >> True
isinstance(gou,animal) >> True
# isinstan 判断是否为XX类型 如果用type 则只显示 village 类
5 类的一些操作方法
dir(obj) 显示类的所有属性和方法
修改/添加属性,方法 : 直接点 . obj.haha = "哈哈" obj.asdf = lambda x: return x+1