标签:模式 深度 优先 现在 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