推荐学习:python视频教程
1.抽象抽象是隐藏多余细节的艺术。在面向对象的概念中,抽象的直接表现形式通常为类。python基本上提供了面向对象编程语言的所有元素,如果你已经至少掌握了一门面向对象语言,那么利用python进行面向对象程序设计将会相当容易。
忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.( 就是把现实世界中的某一类东西, 提取出来, 用程序代码表示, 抽象出来的一般叫做类或者接口).
抽象并不打算了解全部问题, 而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,二是过程抽象.
数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)
2.封装面向对象的程序设计中,某个类把所需要的数据(也可以说是类的属性)和对数据的操作(也可以说是类的行为)全部都封装在类中,分别称为类的成员变量和方法(或成员函数)。这种把成员变量和成员函数封装在一起的编程特性称为封装。
2.1公有成员变量和私有成员变量 python中用成员变量的名字来区分是公有成员变量或者是私有成员变量。
python中,以两个下划线‘_ _’开头的变量都是私有成员变量,而其余的变量都属于公有成员变量。
其中,私有的成员变量只能在类的内部访问,而共有的公有的成员变量可以在类的外部进行访问。
2.2公有方法和私有方法 类的方法是对类行为的封装。
类的方法也分为公有方法和私有方法。
类的私有方法只能通过对象名(在类内部也就是self)在类的内部进行访问。而公有方法可以在类的外部通过对象名进行访问。同样,公有的成员方法和私有的成员方法也是通过名字来区分的,双下划线‘__’开头的方法是私有成员方法。
私有方法:只能在类的内部进行访问,对象无法访问。
私有属性: 提高代码安全性,不允许别人随意修改
class test(object): #私有方法 def __test2(self): print(私有方法,__test2) #普通方法 def test(self): print(普通方法test) #普通方法 def _test1(self): print(普通方法_test1方法) #在类内部调用私有方法 #t.__test2() self.__test2()t = test()t.test()t._test1()#t.__test2() #调用时会报错
#私有方法应用场景--发短信
#私有方法应用场景--发短信class test: #核心私有方法,用于发送短信 def __sendmsg(self): print(---正在发送短信---) #公共方法 def sendmsg(self,newmoney): if newmoney>10000: #余额大于10000才可以调用发短信功能 self.__sendmsg() else: print(抱歉,余额不足,请先充值!)t = test()t.sendmsg(1000000000)
#帐号不允许更改class person(object): def __init__(self,name,sex): self.__name = name self.__sex = sex def getsex(self): return self.__sex def getname(self): return self.__name def setname(self,newname): if len(newname)>=5: self.__name = newname else: print(名字长度必须大于等于才可修改!)xiaoming = person(hoongfu,男)print(xiaoming.getname())print(xiaoming.getsex())xiaoming.setname(xiaoming)print(xiaoming.getname())
2.2.1 练习定义一个类person,类中有私有方法和普通方法,私有属性和普通属性
能通过普通方法调用私有方法,也能通过普通方法更改私有属性。
class test(object): def test(self): self.__sex = 保密 print(普通公有方法test) #调用私有方法 self.__test1() def __test1(self): print(私有方法__test1) #调用私有属性 print(私有属性__sex:,self.__sex)t = test()t.test()
3. 继承3.1继承的概念在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承狗
#继承
#继承class animal(object): def eat(self): print(----吃----) def dirk(self): print(----喝----) def run(self): print(----跑----) def sleep(self): print(----睡觉----)class dog(animal): ''' def eat(self): print(----吃----) def dirk(self): print(----喝----) def run(self): print(----跑----) def sleep(self): print(----睡觉----) ''' def call(self): print(旺旺叫...)class cat(animal): def catch(self): print(抓老鼠....)dog = dog()dog.call()dog.eat()tom = cat()tom.catch()tom.sleep()
#多继承
#多继承class animal(object): def eat(self): print(----吃----) def dirk(self): print(----喝----) def run(self): print(----跑----) def sleep(self): print(----睡觉----)class dog(animal): def call(self): print(旺旺叫...)class xiaotq(dog): def fly(self): print(----飞喽-------)xtq = xiaotq()xtq.fly()xtq.call()xtq.eat()
class cat(object): def __init__(self,name,color=白色): self.name = name self.color = color def run(self): print(%s -- 在跑%self.name)class bosi(cat): def setname(self,newname): self.name = newname def eat(self): print(%s -- 在吃%self.name)bs = bosi(印度猫)print(bs.name)print(bs.color)bs.eat()bs.setname(波斯猫)bs.run()
3.2重写父类方法与调用父类方法所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法.
使用super调用父类的方法:可以直接调用父类方法,不需要通过 父类名.父类方法名 的方式
class cat(object): def sayhello(self,name): print(hello---1)class bosi(cat): def sayhello(self): print(hello---2) #cat.sayhello(self) super().sayhello(zhangsan)bs = bosi()bs.sayhello()
3.3多继承多继承举例:
class base(object): def test(self): print(----base-----)class a(base): def test(self): print(----test1-----)class b(base): def test(self): print(----test2-----)class c(a,b): passc = c()c.test()print(c.__mro__) #可以查看c类的搜索方法时的先后顺序
4.多态4.1多态的定义所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。
多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。
当子类和父类都存在相同的print_self()方法时,我们说,子类的print_self()覆盖了父类的print_self(),在代码运行的时候,总是会调用子类的print_self()。这样,我们就获得了继承的另一个好处: 多态。
class dog(object): def printself(self): print(大家好,我是xxx,请大家多多关照!)class xiaotq(dog): def printself(self): print(hello,ereybody,我是你们的老大,我是哮天神犬!)#定义一个执行函数def exec(obj): #定义时的类型并不知道要调用哪个类的方法, 当运行时才能确定调用哪个类的方法,这种情况,我们就叫做多态 obj.printself()dog = dog()exec(dog)xtq = xiaotq()exec(xtq)
4.2新式类和经典类的区别新式类都从 object 继承,经典类不需要
python 2.x中默认都是经典类,只有显式继承了object
python 3.x中默认都是新式类,经典类被移除,不必显式的继承object
#新式类和经典类的区别class a: def __init__(self): print('a')class b(a): def __init__(self): a().__init__() print('b')b = b()print(type(b))
class a(): def __init__(self): pass def save(self): print(this is from a)class b(a): def __init__(self): passclass c(a): def __init__(self): pass def save(self): print(this is from c)class d(b,c): def __init__(self): passfun = d()fun.save()
推荐学习:python视频教程
以上就是实例详解python面向对象的四大特征的详细内容。
