首页 > 相学 > 面相

面部对象的三大特征

时间:2023-06-28 来源:m.86027.cn

面部对象的三大特征

面相对象的三大特征

  • 封装:提高程序的安全性
  1. 将属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象的外部调用方法,这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。
  2. 在python中没有特有的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前面使用2个“_”。

class Student:n def __init__(self,name,age):n self.name=namen self.__age=age#年龄不希望在类的外部被访问,所以在前面加了“__”n def show(self):n print(self.name,self.__age)n nstu1=Student('张三',20)nstu1.show()nprint(stu1.name)n#print(stu1.__age)#报错:'Student' object has no attribute '__age'nnprint(dir(stu1))nprint(stu1._Student__age)n结果n----n张三 20n张三n['_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']n20

  • 继承:提高代码的复用性

语法格式

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

  1. 如果一个类没有继承任何类,则默认继承object
  2. python支持多继承
  3. 定义子类时,必须在其构造函数中调用父类的构造函数

class Person(object):n def __init__(self,name,age):n self.name=namen self.age=agen def info(self):n print(self.name,self.age)nnclass Student(Person):n def __init__(self,name,age,stu_no):n super().__init__(name,age)n self.stu_no=stu_non nclass Teacher(Person):n def __init__(self,name,age,teacherofyear):n super().__init__(name,age)n self.teacherofyear=teacherofyearn nstu1=Student('张三',20,1001)nteacher=Teacher('李四',34,10)nnstu1.info()nteacher.info()n结果n----n张三 20n李四 34nnn#多继承nclass A:n passnnclass B:n passnnclass C(A,B):n pass

  • 方法重写

class Student(Person):n def __init__(self,name,age,stu_no):n super().__init__(name,age)n self.stu_no=stu_non def info(self):#方法重写n super().info()n print(self.stu_no)n nclass Teacher(Person):n def __init__(self,name,age,teacherofyear):n super().__init__(name,age)n self.teacherofyear=teacherofyearn def info(self):#方法重写n super().info()n print(self.teacherofyear)n nstu1=Student('张三',20,1001)nteacher=Teacher('李四',34,10)nnstu1.info()nteacher.info()n结果n----n张三 20n1001n李四 34n10

  • object类
  1. object类是所有类的父类,因此所有类都有object类的属性和方法
  2. 内置函数dir()可以查看指定对象所有属性

class Student:n def __init__(self,name,age):n self.name=namen self.age=agen def __str__(self):#重写方法n return '我的名字是{0},今年{1}岁'.format(self.name,self.age)nstu=Student('张三',30)nprint(dir(stu))nprint(stu)#默认调用__str__这样的方法n结果n----n['__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']n我的名字是张三,今年30岁

  • 多态:提高程序的可扩展性和可维护性

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

  • 静态语言和动态语言关于多态的区别
    • 静态语言实现多态的三个必要条件
  1. 继承
  2. 方法重写
  3. 父类引用指向子类对象
  • 动态语言的多态不关心对象时什么类型,只关心对象的行为。
  • class Animal(object):n def eat(self):n print('动物会吃')n nclass Dog(Animal):n def eat(self):n print('狗吃骨头')n nclass Cat(Animal):n def eat(self):n print('猫吃鱼')n nclass Person:n def eat(self):n print('人吃五谷杂粮')n n ndef fun(obj):n obj.eat()n nfun(Cat())nfun(Dog())nfun(Animal())nfun(Person())n结果n----n猫吃鱼n狗吃骨头n动物会吃n人吃五谷杂粮

    上一篇:做一个好中医的脸是什么样的?

    下一篇:晚婚女性生活面部特征