标签:country 优点 core col 步骤 效果 特点 没有 linu
一.面向对象编程概述:
1.面向过程编程
面向过程编程:核心是过程二字,指的是解决问题的步骤 ,即先干什么,在干什么,好比一条流水线,是一种机械是的思维方式
一旦完成基本很少改变的场景,linux内核,git ,ApacheHTTPServer 等
缺点:扩展性能低下
2 面向对象编程
面向对象编程:基于面向对象设计程序好比在创造一个世界,你就是一个上帝,周围存在的事物都是对象,
不存在的也可以创造出来,与面向过程机械是的思维烦那个是形成鲜明对比,面向对象更加注重对现实世界的模拟,是一种上帝的思维方式\
优点:解决了程序的扩展性
缺点:编程的复杂度远高于面向过程
3:类与对象:
类即类别,种类,是面向对象设计最重要的概念,
对象是特征与技能的结合体
类是有一系列对象相似的特征与技能的结合体
4 类与对象的__init__方法:
# __init__方法 # 强调: # 1、该方法内可以有任意的python代码 # 2、一定不能有返回值 class People: country=‘China‘ x=1 def __init__(obj, name, age, sex): #obj=obj1,x=‘egon‘,y=18,z=‘male‘ # if type(name) is not str: # raise TypeError(‘名字必须是字符串类型‘) obj.name = name obj.age = age obj.sex = sex def run(self): print(‘----->‘, self) # obj1=People(‘egon‘,18,‘male‘) obj1=People(3537,18,‘male‘) # print(obj1.run) # obj1.run() #People.run(obj1) # print(People.run)
5 类的特殊属性
#python为类内置的特殊属性 类名.__name__# 类的名字(字符串) 类名.__doc__# 类的文档字符串 类名.__base__# 类的第一个父类(在讲继承时会讲) 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲) 类名.__dict__# 类的字典属性 类名.__module__# 类定义所在的模块 类名.__class__# 实例对应的类(仅新式类中)
""" class OldboyStudent: school = ‘oldboy‘ #相同的特征 def choose_course(self): print(‘choose course‘) # print(‘>>>>‘) # print(OldboyStudent.__dict__) # print(OldboyStudent.school) # 调用类的过程称之为类的实例化,调用类的返回值称之为类的一个对象/实例 # 会产生一个对象然后返回 stu1=OldboyStudent() stu2=OldboyStudent() stu3=OldboyStudent() print(stu1.__dict__) print(stu2.__dict__) print(stu3.__dict__) stu1.name=‘lzq‘ stu1.age=78 stu1.sex=‘female‘ print(stu1.__dict__) stu2.name=‘wxb‘ stu2.age=8 stu2.sex=‘female‘ print(stu2.__dict__) stu3.name=‘jh‘ stu3.age=9 stu3.sex=‘female‘ print(stu3.__dict__) """ # 为对象定制自己独有的特征,简化方案二 """ class OldboyStudent: school = ‘oldboy‘ #相同的特征 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def choose_course(self): print(‘choose couese‘) a=OldboyStudent(‘ouyang‘,18,‘male‘) print(a.__dict__) """ """ xxx=33333 class OldboyStudent: school = ‘oldboy‘ # xxx=2222 yyy=333 def __init__(obj, name, age, sex): # print(OldboyStudent.yyy) print(yyy) obj.name = name #stu1.name=‘李铁蛋‘ obj.age = age #stu1.age=18 obj.sex = sex #stu1.sex=‘male‘ def choose_course(self): print(‘choosing course‘) # 1. 属性查找顺序 stu1=OldboyStudent(‘李铁蛋‘,18,‘male‘) # print(stu1.__dict__) # print(OldboyStudent.__dict__) # stu1.xxx=111 # print(stu1.__dict__) # 先从对象自己的名称空间找,没有则去所属的类中找 # print(stu1.xxx) """ xxx=33333 class OldboyStudent: school = ‘oldboy‘ # xxx=2222 yyy=333 count=0 def __init__(obj, name, age, sex): # print(OldboyStudent.yyy) # print(obj.yyy) OldboyStudent.count+=1 obj.name = name #stu1.name=‘李铁蛋‘ obj.age = age #stu1.age=18 obj.sex = sex #stu1.sex=‘male‘ def choose_course(self): print(‘choosing course‘) stu1=OldboyStudent(‘andy‘,18,‘male‘) stu2=OldboyStudent(‘xiaohui‘,17,‘female‘) stu3=OldboyStudent(‘刘银弹‘,28,‘male‘) print(stu1.count) print(stu2.count) print(stu3.count)
1
二:面向对象之继承与派生
一.(一) : 继承
1 什么是继承
继承是一种新建类的方式,新建的类称之为子类,被继承的类称之为父类\基类\超类
Python 中继承的特点
1 子类可以遗传/重用父类的属性
2 Python 中一个子类可以同时继承多个父类
3 在继承背景下说,Python中的类可分为两种:新式类,经典类
新式类: 但凡继承了objict的类Foo以及该类的子类 都是新式类
在python3中一个类即便是没有显式地继承任何类,默认就会继承object
即python3中所有的类都是新式类
经典类: 没有继承object的类,以及该类的子类...都是经典类
在python2中才区分新式类与经典类,
python2中一个类如果没有显式地继承任何类,也不会继承object
2 为何要用继承:
减少类与类之间代码冗余
3
# 在子类中调用父类的方法:
# 方式一:指名道姓的,即父类名,父类方法
class Vehicle: Country=‘China‘ def __init__(self,name,speed,load,power): self.name=name self.speed =speed self.load=load self.power=power def run(self): print("哥哥要开始咯") class Subway(Vehicle): def __init__(self,name,speed,load,power,line): super().__init__(name,speed,load,power) self.line=line def run(self): print(‘该地铁的名字是%s,速度为%s,最大装载量是%s,动力来源是%s,%s线路‘%(self.name,self.speed,self.load,self.power,self.line)) car1=Subway(‘中国高铁‘,‘100km/h‘,‘1000人/厢‘,‘100匹‘,‘12‘) car1.run()
4 在子类派生出的新方法中重用父类功能的方式一:
指名道姓的引用某一个类中的函数
总结:
1 与继承无关
2访问是类的函数,没有自动传值得效果
代码如下
class home: sate=‘河北省张家口市阳原县东城镇七马坊村‘ def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class xiaohui(home): def __init__(self,name,age,sex,hobby=‘run‘): home.__init__(self,name,age,sex) def f1(self): print("%s是我的名字"%self.name) pass class yong(home): def __init__(self,name,age,sex,hobby=‘play game‘): home.__init__(self,name,age,sex) pass num1=xiaohui(‘晖晖‘,18,‘女‘) num2=xiaohui(‘勇哥‘,18,‘男‘) print(num1.__dict__) print(num2.__dict__)
5 在单继承背景下属性的查找优先级:对象-->对象的类-->父类-->父类
class f1: x=1 class f2(f1): # x=2 pass class f3(f2): # x=1 pass class f4(f3): # x=0 pass obj=f4() # obj.x=5 print(obj.x) print() class Foo: def f1(self): print(‘Foo.f1‘) def f2(self): print("Foo.f2") self.f1() class Bar(Foo): def f1(self): print(‘Bar.f1‘) obj=Bar() obj.f2()
6 在多继承背景下属性的查找优先级:
如果一个子类继承多个分支(多个分支没有共同继承一个非object的类)
此时属性查找的优先级是:对象-->对象的类-->按照从右到左的顺序一个分支一个分支的找下去
class G: # x=‘G‘ pass class E(G): # x=‘E‘ pass class F: # x=‘F‘ pass class B(E): # x=‘B‘ pass class C(F): # x=‘C‘ pass class D: x=‘D‘ pass class A(B,C,D): # x=‘A‘ pass obj=A() # obj.x=111 print(obj.x)
7 在子类派生出的新方法中重用父类功能的方式二:super() 必须在类中使用
在Python2中 super(自己的类名,自己的对象)
在Python3 中:super()
调用该函数会得到一个特殊的对象,该对象专门用来访问父类中的属性,完全参展mro 类表
总结:
1 严格依赖集成的mro列表
2 访问是绑定方法,有自定传值的效果
class OldboyPeople: school = ‘Oldboy‘ def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class OldboyStudent(OldboyPeople): def __init__(self,name,age,sex,score=0): super().__init__(name,age,sex) self.score=score def choose_course(self): print("%s choosing course"%self.name) class OldboyTeacher(OldboyPeople): def __init__(self,name,age,sex): super().__init__(name,age,sex) def score(self,stu,num): stu,score=num # stu1=OldboyStudent(‘泽强‘,18,‘male‘) print(stu1.__dict__) teal=OldboyTeacher(‘egon‘,18,‘male‘) print(teal.__dict__)
一(一) 派生
子类添加自己新的属性或者在自己这里重新定义这些属性而且不会影响到父类,需要注意的是,要是自己定义的属性和父类的同名,
在调用新增属性是,就以自己的为准
标签:country 优点 core col 步骤 效果 特点 没有 linu
原文地址:https://www.cnblogs.com/ouyang99-/p/9517238.html