谈谈你对面向对象三大特性-封装、继承、多态的理解,面向对象的三大特性中哪个不属于封装的做法

  谈谈你对面向对象三大特性:封装、继承、多态的理解,面向对象的三大特性中哪个不属于封装的做法

  目录。面向对象的特性:封装、继承、多态8.1封装概念8.1.1封装方法8.2继承8.2.1基本概念8.2.2多重继承机制的继承顺序8.2.3父方法8如何构建父类调用8.2.4类

  8.面向对象的特性:封装、继承、多态8.1封装8.1封装概念封装:在设计一个类的时候,故意将一些属性和方法隐藏在类内部,使之成为现实。禁止以类对象、属性名(或者类对象的参数、方法名)的形式直接调用这些属性。这些隐藏的属性和方法可以由非隐藏的类方法间接操作。3358 www.sinw8.1.2方法类中的公共变量和函数(如公共属性)可以避免外部对内部数据的影响,提高程序的可维护性,避免用户对类中属性或方法的不合理操作,提高代码重用性。Public attributes)类变量和类函数通常可以访问类的外部、内部和子类中的私有属性。类变量和类函数只能在这个类中使用。你不能使用python来实现一个类的封装方法,无论是在它的子类之外还是之内。默认情况下,python类中的变量和方法是公共的,名称前没有下划线_名称以双下划线开头的变量_函数_ _是私有变量_私有函数},而属性

  注意:Python类也有以双下划线开始和结束的类方法。例如,类的构造函数__init__(self)是在Python中定义的,用于Python内部调用。如果您想自己定义类的属性或方法,请不要使用这种格式。

  以封装作用双下划线开头的类属性或类方法。封装的基本原理是通过暗中使用_类名_ _属性_方法(对象名)的名称。_ class name _ _ attribute)方法),封装属性可以创建一个与现有类功能相似的新类。只有通过向现有类添加成员(属性和方法)并实现该类的可重用子类,才能创建新类。实现类的父类,继承类的继承和继承(也叫基类和超类)是相对子类。这意味着子类是从父类派生出来的。从父类http://www.Sina.com父类2派生子类。#类定义部封装底层实现原理多重继承机制:一个子类可以同时有多个直接父类。如果没有明确指定该类继承自哪个类,则默认情况下继承object类。对象是Python中所有类的父类。子类拥有父类的所有属性和方法。包含私有属性或方法。如果父类具有同名的属性和方法,则子类决定根据父类的顺序来继承这些属性和方法。这意味着较高父类的类方法将覆盖较低父类的同名类方法。(自己写程序的时候,尽量不要用多重继承。)8.2.2多重继承机制的继承顺序继承顺序可以分为深度优先和广度优先两种机制。

  深度优先继承顺序:D-B-A-C广度优先继承顺序:D-B-C-A 8.2.3父类方法重写基本概念父类方法重写:继承的父类方法应用于子类。这个方法的子类重写方法的名字必须重写为父类,两者都是第一个子类方法http://www.sina.com/class A(:deffun)Self):pass Class b)A):deffun)Self):passcl=b)Class A方法fun () called,Self value a如果需要通过手工传递调用父类的构造函数方法的子类的构造函数方法可以用两种方法调用父类的构造函数方法:类可以看作一个独立的空间,实例方法可以在类外调用,就像普通函数一样,也可以使用其他标注类名(这种方法也叫Unbinding Method (super))的函数。 在很多继承中,这个函数只能调用第一个直接父类的构造函数方法。格式超级)。_ init _ () parm。(a类))3360def _) name) 3360self。name=namepassclassb(3360 def _ isb)value value()super)。_ init _ () name (super))方法B. _ _ init _

  要添加实例方法,不能添加类方法和静态方法。为单个实例对象添加方法不会影响该类的其他实例对象,并为该类动态添加方法。那么所有实例对象都可以使用方法实例C类语言:pass def info (self): #定义一个实例方法Pass @ class method def info 2(CLS):#定义一个类方法Pass @ static method def info 3():# Pass #类定义静态方法可以动态添加上述三个方法,这将影响所有实例对象,比如C language . info=infoc language . info 2=info 2 language . info 3=info 3c lang=C language()#定义类的实例对象, Clang有以上三种方法# class实例对象只能动态添加实例方法,不会影响其他实例对象clang 1=c language()clang 1 . info=info clang 1 . info(clang 1)#调用必须手动为self传递__slots__的值。 功能是方法被限制为动态添加实例对象的属性和方法。您不能限制向类中动态添加属性和方法。__slots__属性值是一个元组,只有指定的元素可以用作动态添加的属性或方法的名称。_ _ slots _限制其方法的名称,并且不限制参数的数量。__slots__属性对从该类派生的子类也没有影响。如下,用A创建的实例对象,只能动态添加三个属性name,add和info和三个方法name(),add()和Info()Class A():_ _ slots _ _=( name , add ,Info)pass 8.2.5动态创建类type() 函数type(obj):检查一个变量(class object)的具体类型(name,bases,dict):用来创建类名的名称表示类的名称。Bases表示一个元组,其中存储的父类dict表示一个字典。用于指示类中定义的属性或方法。8.3多态性含义用一个函数名实现不同类调用不同内容(函数)的函数方法。特点只关心对象的实例方法是否同名,不关心对象所属的类型。对象所属类之间的继承关系可能会也可能不会增加代码外部调用的灵活性,使代码更具通用性。兼容性强的多态是调用方法的技巧,不会影响到类的内部设计使用示例class Clanguage:def say(self):print(调用C language类的say方法)class cpython(C language):def say (self): print(调用CPython类的say方法)ClassCLinux (C语言):def Say(self):print(调用CLinux类的Say方法)class WhoSay: def say(self,Who): who。say()a=who say()a . say(c language())#调用c语言类的say()方法a.say(CPython()) #调用CPython类的say()方法a. say (CLinux () #调用CLinux类的say()方法。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: