目录

  • 1.面向对象的介绍
  • 2.基本操作
  • 2.1类
  • 2.2继承


1.面向对象的介绍

面向对象是一种对现实世界理解和抽象的方法,对象的含义是指生活中能够看得见的具体事务,一切皆为对象。Python是一门面向对象的语言,面向对象简单来说是一种封装代码的方式。

面向对象的相关概念

  • 类:描述具有相同属性和方法的集合,简单来说就是一个模板,通过它来创建对象。
  • 对象:类的具体实例。
  • 方法:类中定义的函数。
  • 类变量:定义在类中且函数之外的变量,在所有实例化对象中都可以使用。
  • 局部变量:方法中定义的变量,只可以作用于当前实例。

面向对象的三大特性

  • 封装:隐藏对象的属性和细节,仅对外提供公共访问方式,提高复用性和安全性。
  • 继承:一个类继承一个基类可拥有基类的属性和方法,可提高代码的复用性。
  • 多态:父类定义的引用变量可以指向子类的实例化对象,提高了程序的可拓展性。

2.基本操作

2.1类

Python中的类的定义用class表示,具体用法如下:

class 类名:
	属性
	...
	方法
	...

比如我们定义了一个类Dgo,如下图所示:

class Dog:
    # 属性
    color = 'white'

    def __init__(self, age, name):
        self.age = age
        self.name = name

    def eat(self, food):
        self.food = food
        print(f'一个{self.age}岁的{self.name}正在吃{self.food}')

构造方法__init__会在类实例化时自动调用。无论构造方法还是其他方法都需要将self作为第一个参数,它代表类的实例。
类创建好了之后,我们可以通过访问类目来访问属性。
用法如下:

class Dog:
    # 属性
    color = 'white'

    def __init__(self, age, name):
        self.age = age
        self.name = name

    def eat(self, food):
        self.food = food
        print(f'一个{self.age}岁的{self.name}正在吃{self.food}')


dog1 = Dog(5, 'Jack')
dog1.eat('Beaf')
print(dog1.color)

输出:

一个5岁的Jack正在吃Beaf
white

print(dog1.color)表示访问了类中的color的属性,dog1 = Dog(5, 'Jack')表示用类实例化了一个对象,dog1.eat('Beaf')表示调用了类中的eat的方法。
上述的两种方式一个是从外部直接访问类的属性;另一个是从内部访问类的属性和方法的。
那么我们不想要外部人员可以访问我们的属性和方法,怎么办呢?
需要用到私有属性

具体方法:
在属性名或者方法名前面加两条下划线。

用法如下:

class Dog:
    # 属性
    __color = 'white'

    def __init__(self, age, name):
        self.age = age
        self.name = name

    def eat(self, food):
        self.food = food
        print(f'一个{self.age}岁的{self.name}正在吃{self.food}')


dog1 = Dog(5, 'Jack')
print(dog1.color)

输出:

Traceback (most recent call last):
  File "D:/小挑-共享农田/test.py", line 25, in <module>
    print(dog1.color)
AttributeError: 'Dog' object has no attribute 'color'

报错显示Dog这个类中没有color的属性

调用类中的私有属性的方法
在类的前面加一条下划线,后面加两条下划线,并进行调用

用法如下:

class Dog:
    # 属性
    __color = 'white'

    def __init__(self, age, name):
        self.age = age
        self.name = name

    def eat(self, food):
        self.food = food
        print(f'一个{self.age}岁的{self.name}正在吃{self.food}')


dog1 = Dog(5, 'Jack')
print(dog1._Dog__color)

输出:

white

2.2继承

Python 支持类的继承,而且支持多继承,语法格式为:

class 基类(子类1, 子类2 ...):
	...

实例如下:

# 金毛类
class Dog1:
    # 属性
    __color = 'white'
    age = 666

    def __init__(self, age, name):
        self.age = age
        self.name = name

    def eat(self, food):
        self.food = food
        print(f'一个{self.age}岁的{self.name}正在吃{self.food}')


# 泰迪类
class Dog2(Dog1):
    def __init__(self, name):
        self.name = name

    def run(self, speed):
        self.speed = speed
        print(f'{self.name}正在以{self.speed}的速度奔跑')


# 父类的方法
d1 = Dog1(6, 'Lisa')
d1.eat('Beaf')

# 继承父类的方法和子类独有的方法
d2 = Dog2('Faker')
d2.eat('羊肉')
d2.run(60)

输出:

一个6岁的Lisa正在吃Beaf
一个666岁的Faker正在吃羊肉
Faker正在以60的速度奔跑

注意: 如果继承的父类方法不能满足我们的需求,这时子类可以重写父类方法