python面向对象编程基础:
1、类的创建和实例化
2、继承、多态、多重继承
类的继承是一种纵向的关系,def class(BaseClass),class类继承BaseClass,拥有BaseClass的属性和方法
3、类的组合
类的组合是一种横向关系
4、内部属性
由于python语言没有public、private这样的关键字定义属性是公有还是私有的,所以如果使用普通变量命名属性就可以被外部任意调用和修改,这显然是不安全的。python采用了一种name mangling机制,在类的属性命名前加上‘__’则外部就不可访问该属性名,但是内部可以访问和调用
#coding:utf-8
'''
OOP 面向对象编程
类的创建
类的实例化
继承、多态、多重继承
组合
类的属性和方法是静态的
内部属性,不允许外部访问和修改,在属性名前加'__',这是一个name manling,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
既然内部可以访问,如果我们确实需要修改属性,则可以创建内部的修改属性方法
'''
class User:
'''
定义一个用户类
'''
def __init__(self,name,age):
self.__name=name
self.age=age
def setName(self,name):
self.__name=name
def getName(self):
print('我的名字是:%s' %self.__name)
def getAge(self):
print('我的年龄是:%d岁' %self.age)
user1=User('四明',30)
user1.getName()
user1.__name='这样子是改不了的' #改不了name属性了
user1.getName()
user1.setName('这样子就可以改了')
user1.getName()
user2=User('python',2)
user2.getName()
user2.getAge()
user2.age=20
user2.getAge()
# 继承和多态
# 多态就是说同一个方法对于不同的类可以有不同的实现
class Animal:
def __init__(self,name,legs):
self.__legs=legs
self.__name=name
def getName(self):
return self.__name
def printInfo(self):
print('我是%s,我有%d条腿' %(self.__name,self.__legs))
def shout(self):
pass #Animal定义了一个模版
class Cat(Animal):
def shout(self):
print("喵喵喵...") #重写父类的shout方法
class Dog(Animal):
def shout(self):
print("汪汪汪...") #重写父类的shout方法
def run(Animal):
print('%s is running...'%Animal.getName())
# 创建Cat和Dog的实例
cat1=Cat('喵星人',4)
dog1=Dog('汪星人',5)
cat1.printInfo()
cat1.shout()
dog1.printInfo()
dog1.shout()
run(cat1)
run(dog1) #这就是一种多态,传入不同的对象会有不同的表现