码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象知识点总结

时间:2018-11-28 22:29:22      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:模式   深度   优先   现在   tuple   私有方法   类的继承   类变量   lis   

python是一门动态强类型语言:
弱类型体现在传参的时候不用指定数据类型,
强类型体现在比如 2+"str"会报数据类型错误

python不崇尚根据继承所得来的相似,比如tuple和list的方法已经非常相似了,却还是各自独立的方法
这就是python崇尚的鸭子类型,优点是松耦合。


三种编程模式:面向过程编程、面向函数编程、面向对象编程
面向对象设计模式:优点是解决了程序的可扩展性,缺点是可控性差
面向对象的三大特性:继承、多态、封装

类中的静态变量可以被类和对象调用
类变量中对于不可变数据类型最好用类名操作,而不用对象操作
如果用对象操作:
类变量中如果是不可变数据类型,重新赋值是独立的,
类变量中如果是可变数据类型,修改值是共享的

当对象去调用方法的时候,就是把这个对象的值传递给这个方法了
导入一个模块的时候就像是实例化了一个对象,会调用这个模块的__init__方法

组合:一个对象的属性值是另外一个类的对象

继承:
子类.__bases__可以查看父类名字
父类中没有,在子类中出现的属性叫做派生属性
父类中没有,在子类中出现的方法叫做派生方法
子类的对象调用:
只要是子类中有的名字一定先用子类的,子类中没有才用父类的,父类中也没有就报错
如果子类父类都有,优先使用子类的,如果还想用父类的,就得再单独调用父类的

super()方法的使用:
不是单独的找父类,而是根据继承顺序以广度优先来找的
class Base(object):
def __init__(self, name, age):
self.name = name
self.age = age
class temp(Base):
def __init__(self, name, age, sex):
super().__init__(name, age)
self.sex = sex

新式类的继承顺序都是广度优先
经典类的继承顺序都是深度优先
mro():
查看一个类的父类继承顺序

多态:
python天生支持多态

class Alipay:
def pay(self, money):
print("用支付宝支付了{}元".format(money))


class Wepay:
def pay(self, money):
print("用微信支付了{}元".format(money))


a = Alipay()
w = Wepay()


def pay(pay_obj, money):
pay_obj.pay(money)


pay(a, 200)
pay(w, 30)

上面的例子可以看出,调用pay方法的时候
如果是java强类型语言,
必须再创造一个类,让Alipay和Wepay都继承,
而在python中就不用,而是可以直接传Alipay类或者Wepay类

封装:
在类内部可以创造私有静态属性、私有属性、私有方法、
私有静态属性、私有属性、私有方法 只能在类内部使用
如果在类外部调用私有,通过 _类名__私有属性 调用

面向对象知识点总结

标签:模式   深度   优先   现在   tuple   私有方法   类的继承   类变量   lis   

原文地址:https://www.cnblogs.com/QimiSun/p/10034356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!