python三大特性
python中也有三大特性,封装、继承和多态。
封装
封装,就是只能在类的内部访问,外部访问属性或方法会报异常,python中的封装很简单,只要在属性前或者方法名前加上两个下划线就可以,如self.__name,def __eat(self)这样就完成了属性和方法的私有化,也就是封装。
在python中封装并不是很安全,有一个方法可以从外部访问到私有属性和方法,使用_类名__私有属性或方法,如有一个Card类,下面有一个私有属性密码__pwd,print(_Card__pwd)这样就可以获取到卡类下面的私有属性密码的值了。要做一些安全的项目,不建议使用python。
继承
python中继承也非常简单,定义一个Animal类,下面有一个eat()方法,再定义一个Dog类,Dog类中什么都不写,用pass代替。然后实例化一个dog,让dog继承Animal类,dog可以使用eat()方法。
class Animal(obiect):
def __init__(self,name)
self.name = name
def eat(self):
print(self.name,"吃饭")
class Dog(Animal):
pass
dog=Dog("旺财")
dog.eat()
如果子类中的方法与父类中的方法重名,优先调用子类中的方法,如果父类中有color属性,子类中有name和age属性,子类又想使用父类中的color属性,那么可以使用super这个关键字
class Animal(object):
def __init__(self,color):
self.color=color
def eat(self):
print("吃饭")
class Dog(Animal):
def __init__(self,name,age,color):
super(Dog,self).__init__(color)#调用父类的初始化方法
self.name=name
self.age=age
dog = Dog("小黑",2,"白色")
print(dog.name,dog.age,dog.color)
多态
python中本质上是没有真正多态这种思路,只是形式上有这样一个多态的思路,下面看下例子
class Animal(object):
def __init__(self,color):
self.color=color
def eat(self):
print("吃饭")
class Cat(Animal):
def eat(self):
print("猫吃鱼")
class Dog(Animal):
def __init__(self,name,age,color):
super(Dog,self).__init__(color)
self.name=name
self.age=age
def eat(self):
print("狗吃肉")
def feed(obj):
obj.eat()
an=Animal("白色")#实例化Animal
cat=Cat("棕色")#实例化Cat
dog=Dog("小黄",2,"黄色")#实例化Dog
feed(dog)
定义了一个Animal父类,两个子类Cat和Dog里面都有eat()方法,最后再定义一个feed()喂养方法,传入一个obj对象,调用obj.eat(),然后实例化Animal,Cat和Dog,分别在feed中传入实例化对象an,cat和dog会分别打印出不同的语句,这个就是python中的多态。