python没有接口这个概念
接口类,抽象类:制定一个规范
模板:
from abc import ABCMeta, abstractmethod#固定
class Payment(metaclass=ABCMeta): # 抽象类,接口类#这里除了Payment可以改外,其他都不允许改
@abstractmethod # 装饰器 #固定
def pay(self): pass#制定一个规范,如要求继承本类的子类中必须有该方法,如果没有,实例化对象就会报错,而且该方法中没有其他的内容,除了pass外
**python 面向对象的三大特征之一:**
多态: python处处是多态
java :强类型语言,定义变量时都必须用相应数据类型
python:弱类型语言
Python 不管传入什么类型的函数,封装到对象中都可以。
Python没有多态,因为它处处是多态,它有什么?它有鸭子类型。
鸭子类型:看着像鸭子,他就是鸭子
解释:多个类之间有相似的方法,使用类似,他们互称为鸭子
广义的封装:实例化一个对象,给对象空间封装一些属性
侠义的封装:私有制, 私有成员
私有成员:静态私有字段,静态私有方法,静态私有对象属性
只能在自己类中执行,不能在类的外部,或者派生类中访问
私有静态字段(类内定义 两个下划线:__静态字段):
class B:
__age = 10
1、实例化对象不能访问私有静态字段
2、类名不能访问私有字段
3、对于私有静态字段,类的外部不能访问
4、对于私有静态字段,类的内部可以访问
5、对于私有静态字段来说,只能在本类中内部访问,类的外部和派生类均不可访问(事实上是可以访问的,但是工作中千万不要用,真想在外部调用可以写成_类名_+点+静态变量)
-
静态私有方法
-
1、类外部不可访问
-
2、类的内部可以访问
-
3、类的派生类也不能访问
-
面试题
class Parent: def __func(self): print('in Parent func') def __init__(self): self.__func() class Son(Parent): def __func(self): print('in Son func') son1 = Son()
结果:in Parent func
静态私有对象属性:和前面两种相同