python面向对象的三大特征

1.封装:

  封装就是对类和对象的成员访问进行限制,设定可以访问的方式和不可以访问的方式。

分类:

  私有化的封装:当前类/对象种可以使用,类/对象外和子类/对象都不可以用
  受保护的封装:当前类/对象和子类/子类对象可以使用门,类/对象外不可以使用
  公共的封装:任何位置都可以访问!

例:

class Father:
    #属性
    sex = ‘男‘
    age = 48
    #私有化封装 #标志就是在属性或者方法前加两个下划线
    __wife = ‘肤白貌美大长腿~‘
    #受保护的封装 #加一个下划线
    _money = 100

    #方法
    def _say(self):
        print(‘受保护的封装‘)

    def __eat(self):
        print(‘私有化封装‘)class Son(Father): #此处可以使用受保护的成员  def buy(self):    print(‘爸爸一共有‘,self._money,‘钱‘)#实例化儿子对象s = Son()s.buy()

2.继承:

继承就是可以获取另外一个类中的成员属性和成员方法。(并非所有成员)

父类:用于被继承的类,称之为父类,也叫做基类,或者超类
子类:继承其他类的类,称之为子类,也叫做派生类
继承的好处
  • 建造系统中的类,避免重复操作。
  • 新类经常是基于已经存在的类,这样就可以提升代码的复用程度。
继承的特点
  • 在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
  • 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
  • Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

分类:

  单继承:每个类只能继承一个类的方式称为单继承

格式:

class 父类:
    pass

class 子类(父类):#继承操作的关键步骤
    pass

多继承:每个类可以同时继承多个类的方式称为多继承。

格式:

class 父类1:
    pass

class 父类2:
    pass

class 子类(父类1,父类2):
    pass

菱形继承:

格式:

class A:
    pass

class B(A):
    pass

class C(A):
    pass

class D(B,C):
    pass

    A
   /   B   C
   \ /
    D

菱形存在的问题:

  如果BC类同时继承了A类,D类又继承了BC两个类的情况下(菱形继承), 

  在调用BC中某个同名方法(该方法都继承自A类)时会导致继承自A类的该方法被多次调用。产生逻辑问题!

所以python使用 super() 类来解决了多继承的菱形继承问题

  super():   格式:super().方法()

    super不是一个关键字,也是不是有函数,他是一个类

    super()的作用不是查找父类,而是找MRO列表的上一个类

    super()和父类没有任何实质性的关系,只是有时候能调用到父类而已。

    在单继承的情况下,super()永远调用的是父类/父对象

3.多态:

我们在有一些方法在父类已经定义好了,但是子类我们自己再用的时候,发现,其实,我们的虽然都是计算工资的,但是普通员工的工资计算方法跟经理的计算方法是不一样的,所以这个时候,我们就不能直接调用父类的这个计算工资的方法了。这个时候我们就需要用到面向对象的另一个特性,多态。我们要在子类里面把父类里面定义计算工资的方法在子类里面重新实现一遍。多态包含了重载和重写。

这里就不举例了,上两张图片吧!

重写

重写很简单就是把子类从父亲类里继承下来的方法重新写一遍,这样,父类里相同的方法就被覆盖了,当然啦,你还是可以通过super.CaculSalary方法来调用父类的工资计算方法。

重载

重载就是类里面相同方法名,不同形参的情况,可以是形参类型不同或者形参个数不同,或者形参顺序不同,但是不能使返回值类型不同。

原文地址:https://www.cnblogs.com/mswyf/p/9296875.html

时间: 2024-10-13 05:08:54

python面向对象的三大特征的相关文章

python 面向对象的三大特征之 继承

#继承 #object 基类,是python定义的所有类的父类 #经典类:不继承object的类称作经典类 #新式类:继承object的类称作新式类 #python 3.x统一为新式类 #经典类是类对象,新式类是类型对象 #经典类的继承是按照继承的顺序进行继承的 #新式类是按照修改的优先级来继承,越后修改优先级就越高. class Parent:                                 #定义一个父类 def __init__(self): self.age = 0 de

python面向对象的三大特征--继承

#什么时候用继承 #1.当类之间有显著不同,并且较小的类是较大的类所需的组件时,用组合比较好 #2.当类之间有很多相同的功能,提供这些共同的功能做成基类,用继承比较好 class Dad: "这个是爸爸类" money=10 def __init__(self,name): print("爸爸") self.name=name def hit_son(self): print("%s 正在打儿子" %self.name) class Son(Da

python 面向对象的三大特征之 封装

封装:私有化 class Person(object): def __init__(self): self.__gender = "man" #在类的属性名称前面加__ self.__age = 0 def __add_age(self): #私有的方法 self.__age += 1 def show_gender(self): return self.__gender def get_up(self): print("get_up") self.__add_ag

Python——面向对象的三特征

面向对象的三大特征 1.封装 封装是一种信息隐蔽技术让我们的数据更加安全,   即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: 实例: #其实这仅仅这是一种变形操作 #类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__N def __init

php面向对象的三大特征

1.面向对象的三大特征:封装.继承.多态.(抽象(扩展的))2.00A:分析,OOD:设计,OOP:编程.3.封装:信息隐蔽,封装,所有的函数和方法,类中的属性和行为也是封装. 三个访问修饰符public.protected.private也是封装.4.public 公共的 谁都可以用,也可以修改:protected 受保护的 只有自己和后代可以使用和修改: private 私有的 只有自己可以使用和修改:5.继承: 扩展父类的内容,注意只能继承public和protected修饰的内容,而pr

黑马程序员--Objective-C之--OC面向对象的三大特征

OC面向对象的三大特征是封装.继承和多态. OC语言也支持面向对象的三大特征,OC提供了@private.@package.@protected.@public等访问控制符来实现封装 OC也允许子类来继承父类,并且支持多态. 一.封装 封装指的是將对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法对内部信息的操作和访问. OC的封装特性需要通过使用访问控制符来实现. (一).访问控制符 1.@private:当前类访问权限.如果类的成员变量使用@priva

面向对象的三大特征——封装、继承、多态

接触过面向对象的人都知道面向对象有三大特征,分别是封装.继承和多态.这三者分别指的是什么,为什么是这哥仨,使用他们有什么好处,我们来梳理一下. 封装 原则:隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: ①将变化隔离. ②便于使用. ③提高重用性. ④提高安全性. Demo1: 比如一个学生类:他具有姓名和年龄两个属性,但是为了提高安全性和重用性,便于使用,我们将其封装起来. public class Student { private String name; private in

解析PHP面向对象的三大特征

class BenHang extends Card{ /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){ parent::__construct($cardno,$pwd, $name,$money); } function take($money){ echo "本行取款{$money}没有手续费·····<br>"; } function zhuan($money){ echo "

聊一聊面向对象的三大特征

学习Java语言程序设计也有一段时间了.现在我想对封装.继承和多态,在Java中面向对象的三大特征,总结一下我的理解,不妥当的地方望大家包涵.  封装.给我的感觉封装就是一个包装,一个代码是否健壮,与用不用封装有很大的关系,封装就像是包裹一个礼物,不仅让礼物看起来更加精美,而且还完善了内容.请看代码: class Person {     private String name;     private int age;     public void say() {         Syste