python之路——26

复习

1.python没有接口类,有抽象类, 通过abc模块
本质是用来做代码规范用的,在子类中实现和父类方法名完全一样的方法
2.在java的角度看,是有区别的
java没有多继承,为了接口隔离原则,设计了接口的概念,用以实现多继承
java本来就支持多继承,所以就有了抽象类

python 支持单继承与多继承,所以对于接口类和抽象类的区别不明显,
python 没有内置接口类
3.多态
python天生支持多态,
4.鸭子类型
不依赖父类的情况下,实现两个相似的类中的同名方法
5.封装
python中 __名字= 私有化
私有化后,不能从类的外部直接调用
静态属性、方法、对象属性,都可以私有化
这种私有化,只是从代码级别做了变形,并没有真的约束
__类名__名字 类外部调用, __名字 内部调用

学习内容

1.私有属性的用处
1.隐藏属性,不希望外部调用
2.保护属性1,不被随意改变
3.保护属性2,不被子类继承
2.property
内置装饰器函数,只在面向对象中使用
将方法伪装成属性
结合私有属性使用
配合setter deleter 使用
3.classmethod
类方法,修改类的私有类型静态属性
4.staticmethod
静态方法,完全面向对象编程中,一个函数与对象和类均无关,用其将函数伪装成静态方法
5.反射

代码区

from math import pi
class Circle:
    discount = 10
    def __init__(self, r, name):
        self.r = r
        self.__name = name
    def haha(self):
        print('jajaja')
        return 'aaaa'
    @property
    def perimeter(self):
        return 2*pi*self.r
    @property
    def area(self):
        return self.r**2*pi
    @property
    def name(self):
        return self.__name +'sb'
    @name.setter
    def name(self,new_name):
        self.__name = new_name
    @name.deleter
    def name(self):
        del self.__name

c1 = Circle(5,'wang')
print(c1.area)
print(c1.name)
c1.name = 'li'
print(c1.name)
del c1.name
print(c1.discount)
c1.discount = 1
print(c1.discount)
ret = getattr(c1,'haha')
print(ret())

猜你喜欢

转载自www.cnblogs.com/wan2-0/p/10784745.html