Python第八天学习--类与对象的了解(封装继承多态)
第八天Python学习--类和对象篇[*]类
[*] 定义:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
[*]对象
[*] 定义:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
[*]实例化
[*]根据类创建对象的过程,就叫做实例化
封装
定义:根据职责将属性和方法封装到一个抽象的类中将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。不关心方法1.内部的具体实现,从而隔离了复杂度2.封装是面向对象编程的一大特点3.面向对象变成的第一步。将属性和方法封装到一个抽象的类中。4.外界使用类创建对象,然后让对象调用方法5.对象方法的细节都封装在类的内部
继承
实现de重用,相同的代码不需要重复编写继承的语法格式class 类名(父类名): pass1.子类继承父类,可以直接享受父类中已经封装好的方法,不需要再次开发2.子类中应该根据职责,封装子类特有的属性和方法继承的传递性:子类拥有父类以及父类和父类中封装的所有属性和方法
多继承
概念:子类可以拥有多个父类。并且具有父类的属性和方法。注意:如果不同的父类拥有相同的属性名或者相同的方法名,子类对象在调用方法和属性时,会调用哪个父类呢?
多态
1.不同的对象,调用相同的方法,产生不同的执行结果,增加代码的灵活度2.多态可以增加代码的灵活度3.以继承和重写父类方法为前提4.是调用方法的技巧,不会影响到类的内部设计
创建一个实例
class People(object): # 使用class作为关键字,类名使用首字母大写。 def __init__(self,name): # object理解为万物之源 self.name=name # self.name 实例变量 self代表实例本身human=People("小王") #创建一个对象print(human.name)class People: #经典类,默认继承object pass
创建的例子
class People: # 定义基本属性 name="" age="" # 定义私有属性 __weight= 0 # 定义构造函数 def __init__(self,n,a,w): self.name=n self.age=a self.__weight=w def speak(self): print("%s 说 %d 岁."%(self.name,self.age))# 实例化对象p=People("ruubo",10,30)p.speak()
类和对象的关系梳理
class People: name="" def __init__(self,name,age): self.n=name self.a=age def func(self): print("你好") @classmethod def func1(cls): print("you are stupid") @staticmethod def func2(): print("you love me")p=People("小王",18)p.func() # 创建一个对象People.func() # 对象调用实例方法p.func1() # 对象调用类方法People.func1() # 类调用类方法p.func2() # 对象调用静态方法People.func2() # 类调用静态方法第一种同时继承多个类class Father(object): def __init__(self): pass def rich(self): print("我是迪拜皇子很有钱") def car(self): print("我有很多的豪车")class Mother(): def beautiful(self): print("天使的面容,魔鬼般的身材")class Son(Father,Mother): def __init__(self): pass def young(self): print("我有八块腹肌,体脂率为%3") def study(self): print("我是研究生毕业")f=Father()# 创建父类s=Son() # 创建子类f.rich() # 父类调用自己方法f.car() # 父类调用自己方法s.rich() # 子类调用父类的方法s.car() # 子类调用父类的方法s.young() # 子类调用自己的方法f.young() # 父类不能调用子类的方法class Groundfather(object): def __init__(self): pass def rich(self): print("为孙子打下的江山") def house(self): print("家宅丰厚")class Father(Groundfather): def __init__(self): pass def money(self): print("我有很多的财产") def compeny(self): print("我有很多的公司")class Son(Father): def __init__(self): pass def young(self): print("我是一个很小的孩子")s=Son()f=Father()g=Groundfather()s.rich() # 孙子类对象,调用爷爷类方法s.house() # 孙子类对象,调用爷爷类方法s.money() # 孙子类对象,调用父亲类方法s.compeny() # 孙子类对象,调用父亲类方法f.money() # 父类对象,调用自己类方法f.rich() # 父类对象,调用爷爷类方法g.rich() # 爷爷类对象,调用自己类方法g.house() # 爷爷类对象,调用自己类方法
面试问到的相关问题:
1.简述面向对象的三大特性:A.封装:封装指的是把一堆数据属性与方法数据放在一个容器中,这个容器就是对象,让对象通过“ . ”来调用对象中的数据属性与方法属性。B.继承:继承指的是子类可以继承父类的数据属性与方法属性,并可以对其进行修改或使用C.多态:指的是让多类具备类似的数据属性与方法属性,都统一好命名规范,提高开发者的代码统一性,调用者方便理解。2.静态方法和类方法区别?静态方法:实例方法:第一个参数是self不要额外的参数类方法:类方法:第一个参数是class3.下列数据结构中,哪一种是不可迭代的?''' A.dict B.object C.set D.str'''常见的可迭代对象包括:集合数据类型:list,tuple,dict.set.str等生成器(generator),包括生成器和带yield的生成器函数(generator function)答案:B 4.关于Python类的继承不正确的说法是?(多选)A.Python类无法继承B.可以继承,无法执行父类的构造函数C.可以有多个父类D.只能有一个父类答案:'''ABD'''5.类的加载顺序(类中有继承有构造有静态)?1.在堆内存中生成class对象,把静态变量和静态方法加载到方法区,这个堆内存中的class对象是方法区数据的入口2.静态变量默认初始化3.静态变量显示初始化4.执行静态代码块5.成员变量默认初始化,显示初始化6.执行构造函数。
页:
[1]