目录
- 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的速度奔跑
注意: 如果继承的父类方法不能满足我们的需求,这时子类可以重写父类方法