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

python 面向对象知识点概括

程序员文章站 2024-01-07 08:47:22
...

目录

1 .面向对象介绍

2 .类

3 .对象

4 .对象的属性

5 .方法 / 魔法方法

6 .继承


内容 :

一 面向对象介绍

为了更容易理解面向对象 , 我们先说面向过程:
面向过程 和 面向对象 都是一种思想

面向过程 :

面向过程是一种以过程(步骤)为中心的编程思想;
面向过程是人类的思考问题的一种习惯;
目的 →步骤1→步骤2→…→完成

面向对象 :

面向对象也是一种编程思想;
面向对象是一种以事物(对象)为中心的编程思想;
面向对象是以功能来划分问题,而不是步骤;


二 类

类是具有相同属性(特征)和行为(动作)的一组对象的集合
类就是分类、类别、模板、概念等,类是无形的、看不见、摸不着,不实际存在的
类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象

类的构成

类(Class) 由3个部分构成

  • 类的名称:类名
  • 类的属性:一组数据
  • 类的方法:允许对进行操作的方法 (行为)
class 类名:
    属性
    方法

三 对象

  • 客观世界中任何一个事物都可以看成一个对象,对象看得见、摸得着,实际存在的。
  • 对象是构成系统的基本单位。任何一个对象都应具有这两个要素:属性(Attribute)和行为(Behavior)。
  • 对象来自于某个类,对象不能单独存在。一个类可以产生千千万万个对象。
  • 对象和类的关系是,对象是类的实例,类是对象的模板。
  • 类是抽象的,几乎不占用内存,而对象是具体的,占用存储空间。
创建对象的格式:
对象名1 = 类名()

四 对象的属性

添加属性 :
class A:

    def p(self):
        print("AAAA")

a = A()
a2 = A()
a.name = '字母'

print(a.name)

这种方式添加属性, 只能给a添加 , a2 是没有这个属性的 , 这种方法也不常用 , 我们一般都在创建类的时候就定义好了对象的属性. 通过 __init__方法

私有属性 :

格式 :在属性名和方法名 前面 加上两个下划线 __

类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;
私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。


五 方法 / 魔法方法

方法就是函数, 类里面定义的方法,可以使用对象去调用(类也可以调用)

魔法方法: 在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
_init_() :

创建对象后,python解释器默认调用__init__()方法;

class A:
    # 属性
    def __init__(self):
        print('------init--------')
        self.name = '字母大A'
        self.age = 1

_init_()方法,在创建一个对象时默认被调用,不需要手动调用
_init_(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。

__init__方法接收参数
class Cat:
    # 属性
    def __init__(self, name, age):
        print('------init--------')
        self.name = name
        self.age = age
            
tom = Cat('汤姆', 16)
  1. 在类内部获取 属性 和 实例方法,通过self获取;
  2. 在类外部获取 属性 和 实例方法,通过对象名获取。
  3. 如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址;
  4. 但是实例方法是所有对象共享的,只占用一份内存空间。类会通过self来判断是哪个对象调用了实例方法。

__new__方法
class A(object):

    def __new__(cls):
        print("这是 new 方法")
        return object.__new__(cls)


a = A()
  • __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

  • __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例

  • __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要

用处就是单例模式的时候用到 ,平时不写也行,默认执行


__str__方法
class Cat:
    # 属性
    def __init__(self, name, age):
        
        self.name = name
        self.age = age

    def __str__(self):
        return "我是一个猫"

tom = Cat('汤姆', 16)
print(tom)

如果没有用__str__方法,直接就打印对象地址
如果类定义了__str__(self)方法,那么就会打印从在这个方法中 return 的数据
__str__方法通常返回一个字符串,作为这个对象的描述信息


__del__方法
当删除对象时,python解释器会默认调用一个方法,这个方法为__del__()方法

class Cat:
    # 属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print("%s 被 GM 干掉了..." % self.name)


tom = Cat('汤姆', 16)

有一个引用计数的概念 :
当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
当使用del() 删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。


六 继承

在程序中,继承描述的是多个类之间的所属关系。
一个类A里面的属性和方法可以通过继承的方式,传递到类B里。
那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。

# 父类
class A:
    def __init__(self):
        self.num = 10

    def print_num(self):
        print(self.num + 10)
# 子类
class B(A):
    pass

虽然子类没有定义__init__方法初始化属性,也没有定义实例方法,但是父类有。所以只要创建子类的对象,就默认执行了那个继承过来的__init__方法

子类在继承的时候,在定义类时,小括号()中为父类的名字
父类的属性、方法,会被继承给子类
只有一个父类的继承,叫做单继承

子类可以调用自己创建的方法,也可以调用父类的方法

重写: 子类写的方法和父类重名,就是对父类方法的重写

重写后,子类调用方法,就会执行自己方法里的内容

子类调用父类的方法 三种方式
  1. 父类类名.方法名(self)
  2. super(子类类名,self).方法名()
  3. super().方法名() 这种用的比较多

子类不可以用super调用父类的属性
私有方法和私有属性无法被继承

可以继承多个父类
如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)

相关标签: Python知识点

上一篇:

下一篇: