面向对象三大特性
- 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
- 继承 实现代码的重用,相同的代码不需要重复的编写
- 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
私有属性和私有方法
- 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到
- 私有属性 就是 对象 不希望公开的属性
- 私有方法 就是 对象 不希望公开的方法
定义方式
在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法
class Women:
def __init__(self, name):
self.name = name
# 不要问女生的年龄
self.__age = 18 #私有属性
def secret(self):
print("我的年龄是 %d" % self.__age)
xiaofang = Women("小芳")
# 私有属性,外部不能直接访问
#print(xiaofang.__age) #会报错
xiaofang.secret() #我的年龄是 18
class Women:
def __init__(self, name):
self.name = name
# 不要问女生的年龄
self.__age = 18 #私有属性
def __secret(self):
print("我的年龄是 %d" % self.__age)
xiaofang = Women("小芳")
# 私有属性,外部不能直接访问
#print(xiaofang.__age)
# 私有方法,外部不能直接调用
xiaofang.__secret()
class Women:
def __init__(self, name):
self.name = name
# 不要问女生的年龄
self.__age = 18 #私有属性
def __secret(self):
print("我的年龄是 %d" % self.__age)
xiaofang = Women("小芳")
# 私有属性,外部不能直接访问
#print(xiaofang.__age) #会报错
# 私有方法,外部不能直接调用
# xiaofang.__secret() #会报错
继承
单继承
继承的概念:子类 拥有 父类 的所有 方法 和 属性
1) 继承的语法
class 类名(父类名):
pass
- 子类 继承自 父类,可以直接享受父类中已经封装好的方法,不需要再次开发
- 子类 中应该根据 职责,封装 子类特有的 属性和方法
2) 专业术语
-
Dog
类是Animal
类的子类,Animal
类是Dog
类的父类,Dog
类从Animal
类继承 -
Dog
类是Animal
类的派生类,Animal
类是Dog
类的基类,Dog
类从Animal
类派生
3) 继承的传递性
-
C
类从B
类继承,B
类又从A
类继承 -
那么
C
类就具有B
类和A
类的所有属性和方法
class Animal:
def eat(self):
print('吃....')
def drink(self):
print('喝....')
def run(self):
print('跑....')
def sleep(self):
print('跑....')
class Dog(Animal):
def bark(self)