面相对象的三大特征

2023-05-31 0 388

星相第一类的五大特点

PCB:提升流程的可靠性将特性和方式包装袋到类第一类中,在方式外部对特性展开操作方式,在类第一类的外部初始化方式,这种,无须重视方式外部的具体内容同时实现技术细节,进而隔绝了维数。在python中没独有的缩排用作特性的专有,假如该特性不期望在类第一类外部被出访,后面采用2个“_”。
class Student: def __init__(self,name,age): self.name=name self.__age=age#年纪不期望在类的外部被出访,因此在后面加了“__” def show(self): print(self.name,self.__age) stu1=Student(张三,20) stu1.show() print(stu1.name) #print(stu1.__age)#报错:Student object has no attribute __age print(dir(stu1)) print(stu1._Student__age) 结果 —- 张三 20 张三 [_Student__age, __class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __module__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, __weakref__, name, show] 20
继承:提升代码的复用性

语法格式

class 子类类名(父类1,父类2…)

假如一个类没继承任何类,则默认继承objectpython支持多继承定义子类时,必须在其构造函数中初始化父类的构造函数
class Person(object): def __init__(self,name,age): self.name=name self.age=age def info(self): print(self.name,self.age) class Student(Person): def __init__(self,name,age,stu_no): super().__init__(name,age) self.stu_no=stu_no class Teacher(Person): def __init__(self,name,age,teacherofyear): super().__init__(name,age) self.teacherofyear=teacherofyear stu1=Student(张三,20,1001) teacher=Teacher(李四,34,10) stu1.info() teacher.info() 结果 —- 张三 20 李四 34 #多继承 class A: pass class B: pass class C(A,B): pass
方式重写
class Student(Person): def __init__(self,name,age,stu_no): super().__init__(name,age) self.stu_no=stu_no def info(self):#方式重写 super().info() print(self.stu_no) class Teacher(Person): def __init__(self,name,age,teacherofyear): super().__init__(name,age) self.teacherofyear=teacherofyear def info(self):#方式重写 super().info() print(self.teacherofyear) stu1=Student(张三,20,1001) teacher=Teacher(李四,34,10) stu1.info() teacher.info() 结果 —- 张三 20 1001 李四 34 10
object类object类是所有类的父类,因此所有类都有object类的特性和方式内置函数dir()可以查看指定第一类所有特性
class Student: def __init__(self,name,age): self.name=name self.age=age def __str__(self):#重写方式 return 我的名字是{0},今年{1}岁.format(self.name,self.age) stu=Student(张三,30) print(dir(stu)) print(stu)#默认初始化__str__这种的方式 结果 —- [__class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __module__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, __weakref__, age, name] 我的名字是张三,今年30
多态:提升流程的可扩展性和可维护性

即便不知道引用的第一类到底是一个什么类型,仍然可以通过初始化这个变量方式,在运行过程中根据变量所引用第一类的类型,动态决定初始化哪个第一类中的方式。

静态语言和动态语言关于多态的区别静态语言同时实现多态的三个必要条件继承方式重写父类引用指向子类第一类动态语言的多态不重视第一类时什么类型,只重视第一类的行为。
class Animal(object): def eat(self): print(动物会吃) class Dog(Animal): def eat(self): print(狗吃骨头) class Cat(Animal): def eat(self): print(猫吃鱼) class Person: def eat(self): print(人吃五谷杂粮) def fun(obj): obj.eat() fun(Cat()) fun(Dog()) fun(Animal()) fun(Person()) 结果 —- 猫吃鱼 狗吃骨头 动物会吃 人吃五谷杂粮

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务