[python] 面向对象编程: 使用类

发布时间 2024-01-06 20:39:21作者: Akira300000

python的面向对象编程 OOP

基本概念

  • 类class: 自定义的类, 包含实例需要的方法, 属性
  • 方法method: 一个类下的实例应当如何操作
  • 标签attribute: 在类中定义的, 存在于所有实例的属性标签, 可以是变量或定量
# dog.py

class Dog:
# class attribute 类属性: 对于所有对象都是一样的
	species = "Canis familiaris"
# instance attribute 对象属性: 随对象而变化
	def __init__(self, name, age):
		self.name = name
		self.age = age
		
	def hello(self):
		print(f"hello, {self.name}")
  • 实例instance: 依附于类的对象
  • 属性property: 创建对象时传入的参数
a = Dog("ana", 4)
a = Dog("bob", 5)

内置方法

python给每个类设置了一些内置方法, __init__构造方法就是其中之一, 其他的还包括

  • __str__ 将类里的信息以字符串的形式输出
  • __lt__ 定义比较两个类大小的方法
  • __le__ 这个是比较大于等于/小于等于
  • __eq__ 比较是否相等
class Student:
	def __init__(self, name, age){
		self.name = name
		self.age = age
	}
	
	def __str__(self):
		return f"welcome! {self.name}"
		
	def __lt__(self, other):
		return self.age < other.age
		
s1 = Student("Alice", 29)
s2 = Student("Bob", 33)
print(s1)
print(s1 < s2)

私有成员

类里定义的私有成员不能被类对象引用, 但是自己可以内部用 --> 使用__前缀来指明

  • 私有方法: 不能被类对象引用
  • 私有变量: 不能被类对象引用以及修改

继承inheritance

当我们想要使用另一个类里的方法甚至是属性的话, 继承就很好用 - 令子类继承父类

  • 如果需要继承多个类, 就在引用时依次写入
# inheritance.py
class Parent:
	speaks = ["English"]
	
	def getName(self):
		return "Joe Jerry"

class Child(Parent):

	def getName(self):
		return "Molly Merry"
  • 子类继承父类的方法时, 可以通过重写同名的父类方法, 也就是复写override方法满足子类的需求, 因此需要调用父类里的方法时, 需要使用其他方法
class Child(Parent):
	# 使用super()调用父类的初始属性, 然后添加元素
	def __init__(self):
		super().__init__()
		self.speaks.append("German")

	# 方法1: 指明引用的类
	def getParentName1(self):
		Parent.getName(self)
		
	# 方法2: 使用super(), super在这里的意思就是超集
	def getParentName2(self):
		super().getName()

基本上各大语言的OOP逻辑大同小异, 只有语法和其他细节上的差别, 所以掌握其中的原理和逻辑才是最重要的