python对象排序代码 https://gitee.com/pythonbigdata/pythonTest01/blob/master/Test/ObjectSorting.py
python方法的使用代码 https://gitee.com/pythonbigdata/pythonTest01/blob/master/Test/Traffic.py
python异常错误信息类 https://gitee.com/pythonbigdata/pythonTest01/blob/master/Test/Error.py
python方法的基础调用类 https://gitee.com/pythonbigdata/pythonTest01/blob/master/Test/TestClass05.py
1.python封装继承多态
多态: 可对不同类的对象使用同样的操作。
封装:对外部世界隐藏对象的工作细节。
继承:以普通的类为基础建立专门的类对象。
测试一个对象有多个引用使用getrefcount()需要导入import sys模板如果没有引用会抛出异常
多继承:
类同时继承多个父类,class C(A,B),当有AB均有相同方法,而子类又重写时,调用谁的方法,如果子类没有方法,则调用哪个父类的方法?A
class Person: def __init__(self,name=None,age=None,sex=None): print("------person") self.name=name self.age=age self.sex=sex def __str__(self): return "我的姓名:{0},我的年龄:{1},我的性别:{2}".format(self.name,self.age,self.sex) class Music: def __init__(self,piano=None): print("-------music") self.piano=piano class Student(Person,Music): def __init__(self,name=None,age=None,sex=None,score=None,piano=None): print("------student") #给父类传参四种方式————————方式一: # Person.name=name #方式二: # Person.__init__(self,name,age,sex,score) #方式三: #self.age=age #self.sex=sex #方式四: super(Student,self).__init__(name,age,sex) self.score=score self.piano=piano def __str__(self): return "我的姓名:{0},我的年龄:{1},我的性别:{2},我的成绩:{3},我喜欢:{4}".format(self.name,self.age,self.sex,self.score,self.piano) stu=Student("Mary",23,"女",88,"钢琴") print(stu)
注意:
1、super().__init__相对于类名.__init__,在单继承上用法基本无差
2、但在多继承上,super保证每个父类只会被重写一次,如果使用类名调用时,就会出现多次调用
3、多继承时,使用super方法,对父类的传参,应该是由于python中super的算法导致的原因,必须把参数全部传递,否则会报错
4、多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因。
类方法:@classmethod注解就是类方法可以通过类方法调用类属性,也可以通过对象调用类属性
静态方法:@staticmethod是无参 和类.对象没有关系
单例模式提供了一个类只有一个特定类型的对象的机制
在python中,我们可以用多种方法来实现单例模式:
- 使用模块
- 使用__new__
- 使用装饰器
- 使用元类(metaclass)
下面使用__new__的方式来实现