欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python中的面向对象编程

程序员文章站 2022-05-25 20:42:09
...

一.面向对象简述

面向对象编程—— Object Oriented Programming , 简称 OOP,是一种程序设计思想。 OOP
把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据
类型就是面向对象中的类(Class)的概念。

分为:

  • 类:一个模板,(动物) —–是一个抽象的,没有实体的
  • 对象:(类中的某一个实体,eg:狮子,老虎)
  • 属性:(表示这类东西的特征,眼睛,嘴,鼻子)===> __init__
  • 方法:(表示这类物体可以做的事情,eg: 吃饭,睡觉,捕猎)

特点:

     数据封装、继承、和多态

二.类(class)与对象(类实例化)

面向对象最重要的概念就是类( Class ) 和实例( Instance ),类是抽象的模板。
建立Animal类:

class Animalobject):
    #构造方法(魔术方法),当创建对象时,自动执行的函数。
    def __init__(self,name,department,age,gender):
        self.department = department
        self.name = name
        self.age = age
        self.gender = gender
    #方法(在类里面定义的函数,叫做方法)
    def sleep(self):
        print("%s is sleeping." %(self.name))
#创建对象=====>根据模板(类)创建对象(真实存在)
Simba = Animal(Simba,lion,8,mail)
#查看对象的属性
print(Simba.name)
print(Simba.department)
#让对象执行的方法
Simba.sleep()

class为类的关键词。后面接的为类名,即Animal,类名首字母大写,object代表是,动物继承于哪一个类,如果不知道继承哪个类,就写object
由于类可以起到模板的 作用,因此,在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的 __init__ 方法,在创建实例的时候,就把name,department,age,gender等属性绑上去。
类的私有属性:
两个下划线开头,声明该属性为私有( 例:__p[rivate)
不能在类地外部被使用或直接访问。
在类内部的方法中使用时 self.__private_attrs

类的方法:
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,
类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
self 的名字并不是规定死的(因为是形参),也可以使用 this,但是最好还是按照约定是用 self。

类的私有方法:
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 , 不能在类地外部调用。self.__private_methods。

三.数据封装

面向对象一个重要的特点。实例即拥有各自的属性数据,可以通过函数访问这些数据。实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函
数去访问,可以直接在 Student 类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。这些封装数据的函数是和 Student 类本身是关联起来的,我们称之为类的方法。
定义一个方法,除了比一般函数多需要一个self参数,其他别无二致。要调用一个方法,只需要在实例变量上直接调用,除了 self 不用传递,其他参数正常传入。

四.继承

概念:父类与子类/基类和派生类。

定义一个 class 的时候,可以从某个现有的 class 继承,新的class 称为子类、派生类,而被继承的 class 称为基类、父类。

例:上文定义了一个Animal的类.这里建立一个子类直接继承其属性,方法。

class Tiger(Animal):
    pass
class Bird(Animal):
    pass

TigerCatAnimal的子类,Animal为其父类,将所有属性,方法传递给Tiger,Bird.

tiger = Tiger('tiger','cat',6,'femail')
tiger.sleep()
bird = Bird('bird','fly',6,'mail')
bird.sleep()

运行效果如下:
Python中的面向对象编程

注意:
1.如果子类没有的属性和方法, 则去父类找, 如果父类也没有, 就报错
2.父类的私有属性, 子类的方法时不能查看与操作

五.多态

在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看
做是父类。但是,反过来就不行。

a = dict()
b = Animal()
c = Tiger()
d = Bird()
print(isinstance(a,dict))
print(isinstance(b,Tiger))
print(isinstance(c,Animal))
print(isinstance(d,Bird))

Python中的面向对象编程
Python中的面向对象编程

六.多继承原理

# 经典类
class Person1:
    pass
p1 = Person1()
print(p1)

# 新式类
class Person2(object):
    pass
p2 = Person2()
print(p2)

新式类方法与属性继承时 子类使用广度优先算法,经典类方法与属性继承时,子类使用深度优先算法

# python3全部都是新式类;
class D:
    def test(self):
        print("D test")
class C(D):
    pass
    def test(self):
        print("C test")
class B(D):
    pass
    # def test(self):
    #     print("B test")
class A(B,C):
    pass
    # def test(self):
    #     print("A test")
a = A()
a.test()

Python中的面向对象编程

相关标签: Oython