# python # /usr/sbin/py/python # -*-coding:utf8-*- # python 类的运用 # 类继承 class grandPa: def __init__(self, name, age): self.name = name self.age = age def run(self): print("%srunning" % self.name) pass class father(grandPa): # 单继承写法 pass class mother: money = 200 pass class son(father, mother): # 多继承写法 def __init__(self, name, age): # grandPa.__init__(self,name,age) super().__init__(name, age) def showInfo(self): print(self.name, self.age) super().run() # 子类到底继承了父类的啥 print(son.money) print(father.__dict__) print(son.__dict__) # __dict__{'__module__': '__main__', 'money': 100, '__doc__': None} # {'__module__': '__main__', '__doc__': None} # 属性列表是不变的 # 子类中调用父类方法 s1 = son("son", 10) s1.showInfo() s1.run() # 接口继承 # python 中定义接口,python没有像java 或者c#一样提供接口的直接定义 需要借助 abc模块实现 import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def run(self): pass class Dog(Animal): def run(self): print("dog is running") dog = Dog() dog.run() # python 中的多态 python由于没有数据类型规范其实多态就是 对象各自调用自己的方法只不过方法一致 # python 中的封装 # 提及封装就涉及到了python中约定的特性 # python 中约定了以单下划线开头的属性,是私有属性不应该在外部调用,但是pyton并没有强行限制 只是一种约定 # python 中以双下划线开头的属性或者方法 进行封装 # python 如何真正的去封装呢? 可用在init函数中把属性藏起来 class Person: def __init__(self, name, age): self.name = name self.age = age self.__like ="eating" def run(): print("running") self.__run = run def _selefMake(self): print("单下划线方法,不应该调用") def __sing(self): print("双下划线方法") def getHobby(self): return self.__like def getRunMethod(self): return self.__run p1 = Person("jake", 45) p1._selefMake() # p1.__sing() 这样是不能调用的 p1._Person__sing() # 这样就又调到了双下划线的方法 # 原因还是在属性列表里 print(p1.__dict__) # {'name': 'jake', 'age': 45} print(Person.__dict__) # {'__module__': '__main__', '__init__': <function Person.__init__ at 0x036B2DA8>, # '_selefMake': <function Person._selefMake at 0x036B2D60>, # '_Person__sing': <function Person.__sing at 0x036B2D18>, '__dict__': # <attribute '__dict__' of 'Person' objects>, # '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None} # 通过观察这个属性列表 我们可用得出 python 对双下划线开头都属性或方法其实并没有真正的去限制访问,而是 # 把方法名称进行了修改,无法按照原有名称调用而已 print(p1.getHobby()) p1.getRunMethod()()
python 21 类特性 封装继承多态
最新推荐文章于 2024-05-03 12:13:14 发布