# 面向对象三大特性: 封装 继承 多态
# 广义得封装:
# 把方法和变量都封装在类中
# 比如人狗大战
# 规范创建对象
# 创建所有人得属性名都能一致
# 把所有得方法装进一个角色中
# 狭义得封装:
# 在类得外部干脆不能调用了,私有化了
#
class Student:
def __init__(self, name):
self.name = name
laowang = Student('老王')
# print(laowang.name)
# laowang.name = '老丁'
# print(laowang.name)
# 狭义得封装:
# class Student:
# def __init__(self,name):
# self.__name = name
#
# def get_name(self):
# return self.__name
#
#
# laowang=Student('老王')
# print(laowang.get_name())
#
# print(laowang.name)
# 作用: 为了更好得限制用户,不能随意得查看和修改,增加程序得安全性
# class A:
# __VAL = [] # 私有静态变量
#
# def __init__(self):
# print(A.__VAL) # 类得内部可以调
#
#
# # print(A.VAL)
# # print(A.__VAL)
# a=A()
#
# class B:
# def __aaa(self):
# '''私有得方法,相当于把方法保护起来了'''
# print('aaaa')
#
# def func(self):
# self.__aaa()
#
# b=B()
# # b.aaa()
# # b.__aaa()
# b.func()
#
# 总结: 在类得内部,属性可以变成私有得,类变量可以变成私有得,实例方法可以变成私有得,
# 一旦变成私有得,就只能在类得内部使用,而不能在类得外部使用
# 思考:
# 1.私有化到底怎么做到得?
# 2.私有变量能不能被继承?
# class A :
# __abc = 123 # 偷偷改了名字
#
#
# print(A.__dict__)
# print(A._A__abc) # 没人这么调
# 2.私有得变量不能被继承!
# class A:
# def __func(self): # _A_func
# print('in A')
#
#
# class B(A):
# def wahaha(self):
# self.__func() # _B_func
#
# b=B()
# b.wahaha()
# 私有练习题
# class A:
#
# def __init__(self):
# self.__func()
#
# def __func(self):
# print('in A')
#
#
# class B(A):
# def __func(self):
# print('in B')
#
#
# b = B()
# 多态
# 在python中一切皆对象,处处是多态
# def func(a:object,b:bool,c:list):
# print(a,b,c)
#
# func('1',True, {})