python编程基础之三十四
面向对象:三大特征:封装,继承,多态
封装:隐藏对象的实现过程,对外仅仅公开接口,控制在程序中的读取和修改的访问级别
类,函数都是一种封装
属性私有化:当类里面的属性不想被外部访问,可以将这些属性设置为私有属性,只需要家两个下划线'__', 例如:__age,这就是个私有属性,加一个下划线的成为保护属性,
可以直接访问,但是因为是保护属性所以大家对这类属性,不会特意去访问,一般不会访问,都是约定俗成的,没有具体规定要求
1 class Dog: 2 def __init__(self,name,gender,age): 3 self.name = name 4 self._gender = gender #'保护'变量 5 self.__age = age #私有变量 6
当外部希望访问内部的私有的时候,可以在内部添加一个公有方法对外来访问某个私有属性
也可以用属性装饰器
1 class Dog: 2 def __init__(self,name,gender,age): 3 self.name = name 4 self._gender = gender 5 self.__age = age 6 @property 7 def age(self): 8 return self.__age 9 @age.setter 10 def age(self,age): 11 self.__age =age 12 13 ding = Dog('丁丁','公',5) 14 print(ding.name) 15 print(ding.age) 16 ding.age =10 17 print(ding.age) 18 print(ding._gender)
成员函数私有化:也就是把方法设置为私有的,也都是两个下划线开头就行面向对象语言一个主要的功能就是”继承“,所谓继承就是使现有的类无需编码便可以拥有原有类的方法和属性。
-
可以简化代码,减少冗余度
-
提高了代码的可维护性
-
提高了代码的安全性
-
是多态的前提
单继承:一个子类只有一个父类子类会继承父类的所有属性和方法
私有属性在子类中不能直接使用,
1 #语法: 2 class 子类名(父类名): 3 pass
object是Python中所有类的父类【一般情况下,如果一个类没有指明的父类,默认它的父类为object】
构造方法的继承
1 class Animal: 2 def __init__(self,name,age): 3 self.name = name 4 self.__age =age 5 .... 6 7 class Dog(Animal): 8 def __init__(self,name,age,gender): 9 #调用父类构造方法的好处,简化了子类构造方法代码,实现了代码复用 10 #1. super(当前类名,self).__init__(实参列表) #实参不要带self 11 # super(Dog,self).__init__(name,age) 12 # 2. super().__init__(实参列表)#实参不要带self 13 # super().__init__(name, age) 14 15 #3. 父类名.__init__(self,其它参数) 16 Animal.__init__(self,name,age) 17 self.gender = gender
方法的改写:说白了就是重新写一遍新的
多继承:一个子类多个父类
1 class 子类类名(父类1,父类2....): 2 子类类体