面向对象的三大特性:封装,继承和多态
封装:在类的内部定义属性和方法,通过对象或类名来访问属性和方法,隐藏功能的实现细节,也可以设置访问权限。
广义的封装:实例化一个对象,给对象空间封装一些属性;狭义的封装:私有制;私有成员:私有静态字段,私有方法,私有对象属性
继承:子类需要重用父类的属性和方法,子类中也可以定义自己的属性和方法。
多态:python是弱类型语言,python中处处是多态;python中没有多态,但是有鸭子类型 ==》一些类含有相同的方法,则这些类就互称为鸭子
下面这几个类都有index方法,index具有相同的作用,则这几个类就互称为鸭子
class Str:
def index(self):
pass
class List:
def index(self):
pass
class Tuple:
def index(self):
pass
对于私有成员,类的外部不能访问,子类(派生类)也不可以访问,只能在本类的内部访问
class Animal:
head = "True" #静态变量(静态字段)
body = "True" #静态变量(静态字段)
__color = "red" #私有静态变量(私有静态字段)
__skin = "black" #私有静态变量(私有静态字段)
def __init__(self,name,age): #特殊方法
self.name = name #对象属性(普通字段)
self.age =age #对象属性(普通字段)
def eat(self):#普通方法
print("所有动物都需要吃……")
def drink(self):#普通方法
print("所有动物都需要喝……")
def __func(self):#私有方法
print("Animal fun")
def fun(self):
self.__func() #私有方法在类的内部可以访问
class Dog(Animal):
pass
a1 = Animal("小猫",2)
##print(a1.head,a1.body)
##a1.eat()
##print(a1.__color) #报错 对象不可以访问类的私有静态变量
##a1.__func() #报错 对象不可以访问类中私有方法
##print(Animal.head)
##print(Animal.__color) #报错 类名不可以访问类中的私有静态变量
##Animal.__func() #报错 类名不可以直接访问类中的私有方法
d = Dog("小狗","2")
#print(d.head)
#print(d.__color) #报错 子类不可以访问父类的私有静态变量
#d.__func() #报错 子类不可以访问父类的私有方法
d.fun()