📅  最后修改于: 2023-12-03 15:25:23.892000             🧑  作者: Mango
在面向对象编程中,属性和方法是两个不同的概念。虽然它们都是类的成员,但它们的用途和行为是不同的。
属性是类的成员变量,用于保存对象的状态信息。属性可以是公共的(public)、私有的(private)或受保护的(protected)。公共属性可以被类的对象直接访问和修改,而私有属性只能被类的内部方法(例如getters和setters)访问和修改,受保护的属性可以被类和其子类的方法访问和修改。
属性通常用于保存对象的值或状态,例如人的身高、体重等信息都可以保存在人的属性中。
下面是一个Python类中定义属性的示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
return self.name
def get_age(self):
return self.age
在上面的示例中,Person类定义了两个属性:name和age。在对象创建时,它们被初始化为构造函数中传递的值。类还定义了两个getter方法来获取这些属性的值。
方法是类的成员函数,用于执行类的操作。方法可以是公共的、私有的或受保护的。公共方法可以被类的对象直接调用,而私有方法只能被类的内部方法(例如其他方法)调用,受保护的方法可以被类和其子类的方法调用。
方法通常用于执行一些操作,例如将人脸图片转换为数字特征向量。
下面是一个Python类中定义方法的示例:
import cv2
class FaceRecognition:
def __init__(self):
self.face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
self.face_recognizer = cv2.face.LBPHFaceRecognizer_create()
def train(self, images, labels):
faces = []
for image in images:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces.append(gray)
self.face_recognizer.train(faces, np.array(labels))
def predict(self, image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = self.face_detector.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
roi_gray = gray[y:y+h, x:x+w]
label, confidence = self.face_recognizer.predict(roi_gray)
if confidence < 50:
return label
return -1
在上面的示例中,FaceRecognition类定义了两个方法:train和predict。train方法用于训练人脸识别器,predict方法用于预测输入图像中的人脸标签。
属性和方法都是类的成员,但它们的用途和行为是不同的。属性用于保存对象的状态信息,方法用于执行类的操作。在编写类时,需要根据类的设计选择合适的属性和方法,以便实现类的功能。