类的应用场景(重要运用补充)类的组合继承
发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,```###1、什么是面向对象编程? 以前是用函数 现在是类+对象##2、什么是类,什么是对象,他们又有什么关系? 把函数放进类里 class 类:
```###1、什么是面向对象编程? 以前是用函数 现在是类+对象##2、什么是类,什么是对象,他们又有什么关系? 把函数放进类里 class 类: def foo(self): pass def too(self): pass obj是对象,是实例化后就得到一个对象(实例) obj=类() obj.foo()##3、什么时候适合用面向对象?1、根据一个模板创建东西的时候(cs里人的模板创建警察和劫匪)2、多个函数传入多个相同参数或者多个函数里有相同操作时##4、self就是调用当前方法的对象 #公有属性应用场景:每个对象中保存相同的东西时,可以使用公有属性 class foo: #静态字段 #公有属性 countey="中国" #创建的每一个对象都有共同的值,就能设置成公有属性 def __init__(self,city,count): #普通字段 #普通属性(在每个对象都保存着自己的那一份) self.city=city self.count=count des bar(self): pass obj1=foo("上海",200000) obj1.bar() obj2=foo("苏州",1000000) obj2.bar()##5、什么是封装? 类中封装了:字段、方法 对象中封装了:普通字段的值 class f1: def __init__(self,a): self.a=a print("f1") class f2: def __init__(self,arge1): self.b=arge print("f2") class f3: def __init__(self,arge2): self.c=arge2 print("f3") o1=f1("alex") 02=f2(o1) o3=f3(o2) 想输出"alex"#o3=f3(o2) o3.c==>02#o2=f(o1) o3.c=f(o1) o2.b==>o1 o1=f1("alex") o3.c.b.a##继承 class f1: def __init__(self): print("f1") def a1(self): print("f1a1") def a2(self): print("f1a2") class f2(f1): def __init__(self): print("f2") def a1(self): self.a2() print("f2a1") def a2(self): print("f2a2") class f3(f2): def __init__(self): print("f3") def a1(self): print("f3a1") def a2(self): print("f3a2") obj=f3() obj.a1() #输出 f3a2 f2a1 obj传进去,self.a2=obj.a2=f3.a2![](https://cache.yisu.com/upload/information/20200310/57/120670.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)!##6、静态方法 字段:普通字段(保存在对象中) 静态字段(保存在类中) 方法:普通方法(保存在类中,调用者是对象,至少有一个self参数) calss fff: def __init__(self,name) self.name=name def a1(self): print(self.name) obj=fff() obj.a1() #值已经保存在对象中了,对象有用。 ##当你的方法和对象里的值没有任何关系时这样调用浪费空间 calss fff: def a1(self): print("alex") obj=fff() obj.a1() ##此时应用静态方法 静态方法(保存在类中,调用者是类,可以有任意个参数): calss fff: @staticmethod def a1(): #self不是必须的了 print("alex") fff.a1() #不需要创建对象直接调用就行## 类的继承中有(继承,组合2种方式)class School(object): """"学校成员基类""" number=0 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex self.enroll() #在基类里内部调用(相当于子类默认调用) def enroll(self): """注册""" print("%s欢迎加入我们学院!"%self.name) School.number+=1 #把值赋给公有属性(变成全局的)直接self.number只是在实例里面创建了一个变量number=0然后加1 def tell(self): """打印自己的信息""" print("------info:%s-------"%self.name) for k,v in self.__dict__.items(): print("\t",k,v) print("------end-------" ) #def __del__(self): # 析构 print("[%s] 被开除了!"%self.name) School.number-=1class newschool(object): def openschool(self,addr): print("open in the %s"%addr)class Teacher(School,newschool): # 多继承(继承多个类) """讲师类""" def __init__(self,name,age,sex,salary,course): #School.__init__(self,name,age,sex) #经典类 super(Teacher,self).__init__(name,age,sex) # 新式类 self.salary=salary self.coures=course def teaching(self): print("Teacher [%s] is teaching [%s]"%(self.name,self.coures))class Student(School): """学生类""" def __init__(self,name,age,sex,course,fee,ttt): # School.__init__(self,name,sex,age) super(Student,self).__init__(name,age,sex) self.Teacher=ttt #类的继承组合继承模式 self.course=course self.fee=fee self.amount=0 def pay_fee(self,amount): print("student [%s] has just paid [%s]"%(self.name,self.amount)) self.amount+=amount#t=Teacher()t1=Teacher("王肖",29,'F*M',20000,"Python")s1=Student("王鼎",26,"N/A",'Python',30000,t1)s2=Student("苏晓",22,"F","Python",5000,t1)print(s1.Teacher.salary) #类的继承组合调用