资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
类与对象知识整理1.类和对象有什么关系?类和对象的关系就如同模具和这个模具制作出的物品之间的关系。个类为它的全部对象给出了个统的定义,他的每个对象则是符合这种定义的个实体,因此类和对象的关系就是抽象和具体的关系。2.如果我们定义了个狗类,那你能想象出由“狗”类实例化的对象有哪些?柴,阿拉斯加,柯基,哈奇。3.类的创建与实例输出:旺财注意:函数def后定是跟着个空格4.给类法传参5.类中的函数跟变量有什么特殊含义?类中的函数叫法,类中的变量如下例所示:class Dog():12 def _init_(self, name):#给了dog类一个参数name,并初始化3 self.name = name4 5keji = Dog(旺财)#Dog类的实例,实例对象是keji6print(keji.name) 7class 类名():1 def 类函数(self,参数):#这里传了一个参数,实例时需要给一个值2 print(参数)3实例1 = 类名()#实例4实例1.类函数(值)#调用类方法,并给对应参数一个值,括号里面等同于(参数 = 值)5class Student():1 name = 张三 #类变量(即类属性)2 def _init_(self):3输出:张三 张三 18 中运上代码,我们可以知道:name是类变量,它可以由类名Student直接调,也可以由对象student1来调age是成员变量,因为它是在构造函数(_init_)内以self.开头来定义的。可以由类的对象来调用,这里可以看出成员变量一定是以self.的形式给出的,因为self的含义就是代表实例对象; difficulty不是成员变量,虽是以self.给出,但并没有在构造函数(_init_)中进行初始化。 subject不是成员变量,它只是study函数中的局部变量6.self是什么?先明确的是self只有在类的法中才会有,独的函数或法是不必带有self的。self在定义类的法时是必须有的,虽然在调时不必传相应的参数。self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(减少理解难度),不要搞另类,家会不明的。下例中将self改为myname样没有错误:输出:bill7.类的继承1. 类的继承很程度也是为了避免重复性劳动。如说当我们要写个新的类,如果新的类有许多代码都和旧类相同,有部分不同的时候,就可以“继承”的式避免重复写代码; self.age = 18 #成员变量45 def study(self):6 self.difficulty = 中 7 subject= 数学 #函数内部的局部变量8 9print(Student.name)10student1 = Student()11print(student1.name)12print(student1.age)13student1.study()#成员变量由于在方法中创建,所以必须先调用方法14print(student1.difficulty)15#print(student1.subject) #若打印出来,将会报该类没有subject属性16class Person():1 def _init_(myName,name):2 myName.name=name3 def sayHello(myName):4 print(My name is:,myName.name)5p=Person(bill)6print(p.name)72. 类创建的实例,同时属于类;3. 类创建的实例,不属于类;4. 所有实例,都属于根类object;(即class Student(object) object平时都是省略)#类与类1. 类除了可以定制新的类法,还能直接覆盖类的法;2.【单继承】:个类从个类中继承类法;class 类(类)3.【多重继承】:个类从多个类中继承类法,具有就近原则(在类调属性和法时,优先考虑靠近类的类)class 类(类1,类2.)4. 【多层继承】:类的创建,可以调所有层级的类的属性和法class B(A):class C(B):#案例1:类的定制(继承类后新增类法)#案例2 :类的重写class Chinese:1 eye = black2 def eat(self):3 print(吃饭,选择用筷子。)45class Cantonese(Chinese): # 类的继承6 native_place = guangdong # 类的定制(即新增一个类变量)7 def dialect(self): # 类的定制(即新增一个函数)8 print(我们会讲广东话。)910yewen = Cantonese()#实例化子类1112print(yewen.eye) # 父类的属性能用13print(yewen.native_place) # 子类的定制属性也能用14yewen.eat() # 父类的方法能用15yewen.dialect() # 子类的定制方法也能用16class Chinese:1 def _init_(self):2 self.skinColor = yellow#父类成员变量skinColor3输出:东话注释#号删了运后:输 东话 yellow8._ _init_初始化的作,和_str_的处加上下划线的函数名都是有特殊含义的,每个都样 init的作是,只要你建个实例,这个函数的代码就动运遍,不需要专调这个函数str的作,如果这个函数有return语句,动将返回值打印出来,不专写print 8。初始化函数 你把类理解成种复杂的变量,这个变量到底在计算机中占多?于是你要初始化所有类中到的变量,告诉计算机这个类都有哪些变量,类型都是什么(这样计算机才知道开多内存)以及放什么(赋值)类和函数的区别,为什么要有类,就像如说你有服,这个服你就可以理解为函数,但是吧,你的服可能要分冬天穿的和夏天穿的,这样你就要整理箱,把东都装起来。冬天穿的放到起,然后夏天穿的放到起,为什么要这样呢?就是因为便使。这的整理箱也把它理解为类习题:参考答案: self.language = 普通话#父类成员变量language45class Cantonese(Chinese): # 类的继承6 def _init_(self):#重写初始化函数7 #Chinese._init_(self) #继续引用父类的初始化方法8 self.language = 广东话#修改成员变量language910person1 = Cantonese()#子类实例化11print(person1.language)12#print(person1.skinColor)1314#由于直接重写父类初始化方法,所以成员变量只有language,15#想要继续引用skinColor变量,初始化必须在写上父类初始化方法,16#可把上方代码第8和13行注释的#号删了,运行测试一下1718一、按照以下要求定义一个游乐园门票类,并尝试计算2个成人+1个小孩子平日票价11.平日票价100元22.周末票价为平日票价120%33.儿童半价4class Ticket:1 pice = 100 #类属性2 weekend = pice*0.2+pice #类属性3 def compute(self,adultNum,childNum,isweekend):#类方法,计算金额(在调用是必须给三个参数值)4解析:先,先建个Ticket类,票价由于在其他类函数中需要到,所以可以设置成类属性其次,考虑到要统计票价,所以需要写个类法来处理,由于考虑到让系统更智能,因将成数量,孩数量以及是否为周末等信息通过类外部获取(如不需要,可直接将这三个数定义为局部变量,赋固定值)所以,需要3个参数。函数内部要先判断是不是周末,如果不是周末,那么票价就是price,如果是周末,那么票价就是weekend最终,将成数量,孩数量以及是否为周末的值设置为,由户输,并将值传到实例后的compute法。 if(isweekend=no):5 total = adultNum*self.pice+childNum*(self.pice/2)#类属性可以用self.变量名调用6 print(应该支付总金额:,str(total)7 elif(isweekend=yes):8 total = adultNum*self.weekend+childNum*(self.weekend/2)9 print(应该支付总金额:,str(total)10 else:#处理输入其他值的情况11 print(输入有误)1213print(welcome to 迪斯尼 )14adult = int(input(请输入成年人数量)15child = int(input(请输入小孩数量)16isweekend = input(是否是周末?yes/no)17t = Ticket()pute(adult,child,isweekend)#给参数赋值,19#三个变量的值依次对应三个参数,顺序不能乱!20
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号