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逻辑大同小异, 只有语法和其他细节上的差别, 所以掌握其中的原理和逻辑才是最重要的