在Python中,面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,通过使用对象、类、继承、封装、多态等概念组织代码和数据。可能会涉及到的概念:
类(Class)
:类是一个抽象的概念,用于描述一类对象的共同特征,定义了对象的属性(成员变量)和方法(成员函数)。
对象(Object)
: 对象是类的一个实例,具体化了类的定义,拥有类定义的属性和方法。
类变量
:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
局部变量
:定义在方法中的变量,只作用于当前实例的类。
实例变量
:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self修饰的变量。
类方法
:类中定义的函数。
继承
:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。派生类可以扩展或修改继承的内容,实现代码的重用和层次化的设计。
封装
:封装是将对象的状态(属性)和行为(方法)封装在一起,通过访问控制限制外部对对象内部数据的直接访问。通过双下划线前缀来创建私有属性和方法,实现基本的封装。
多态
:同一种操作作用于不同的对象上时,可以产生不同的行为。
1. 类定义语法
class ClassName:
<statement-1>
.
.
.
<statement-N>
与函数定义 (def 语句
) 一样,类定义必须先执行才能生效。把类定义放在 if 语句的分支里或函数内部试试。
在实践中,类定义内的语句通常都是函数定义,但也可以是其他语句。类里的函数定义一般是特殊的参数列表,这是由方法调用的约定规范所指明的
当进入类定义时,将创建一个新的命名空间,并将其用作局部作用域 — 因此,所有对局部变量的赋值都是在这个新命名空间之内。 特别的,函数定义会绑定到这里的新函数名称。
2. Class对象
类对象支持2种操作:属性引用
和实例化
属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name
。 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称。 因此,如果类定义是这样的:
class myClass:
""" A simple example class."""
i = 12345
def f(self):
return 'hello,world!'
# myClass.i
# myClass.f
myClass.__doc__ # 输出 ' A simple example class.'
那么 MyClass.i
和 MyClass.f
就是有效的属性引用,将分别返回一个整数和一个函数对象。
类属性也可以被赋值,因此可以通过赋值来更改 MyClass.i
的值。
__doc__
也是一个有效的属性,将返回所属类的文档字符串: “A simple example class”。
类的 实例化
使用函数表示法。 可以把类对象视为是返回该类的一个新实例的不带参数的函数。
实例化操作 (“调用”类对象) 会创建一个空对象。 许多类都希望创建的对象实例是根据特定初始状态定制的。 因此一个类可能会定义名为 __init__()
的特殊方法。当一个类定义了 __init__()
方法时,类的实例化会自动为新创建的类实例发起调用 __init__()
。
class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
def bark(self):
return "Woof!"
# 创建一个Dog类的实例
my_dog = Dog('Scott',3)
# 访问对象的属性和调用对象的方法
print(f'狗的名字是:{
my_dog.name}')
print(f'它叫的声音:{
my_dog.bark()}'