参考资料:https://www.runoob.com/python3/python3-tutorial.html
Python3面向对象
类定义
class ClassName:
<statement-1>
.
.
.
<statement-2>
类对象
class MyClass:
x = 1 #属性必须赋初值
def f(self):
return self.x + 1
#创建类的对象
y = MyClass()
#访问类的属性和方法
print(y.f()) #2
print(y.x) #1
构造函数__init__()
# 与C++的不同之处在于, 类的数据成员可以在构造函数内定义;
# self的作用和C++中的this类似, 但不可以省略
class MyComplex:
def __init__(self, re, im):
self.re = re
self.im = im
x = MyComplex(1, 2)
print(x.re, x.im)
继承
class DerivedClassName(BaseClassName):
<statement-1>
.
.
.
<statement-2>
派生类会继承基类的属性和方法
class PEOPLE:
def __init__(self, name, age, weight):
self.name = name
self.age = age
self.__weight = weight # weight为私有属性
def speak(self):
print(f"我叫{self.name},今年{self.age}岁")
class STUDENT(PEOPLE):
def __init__(self, name, age, weight, grade):
PEOPLE.__init__(self, name, age, weight)
self.grade = grade
# 覆写父类的方法
def speak(self):
print(f"我叫{self.name},今年{self.age}岁,在读{self.grade}年级")
s = STUDENT('Tom', 10, 60, 3)
s.speak()
多继承
# 若是父类中有相同的方法名, 而在子类使用时未指定, Python从左向右搜索
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
运算符的重载
class A:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return A(self.x + other.x, self.y + other.y)
a = A(1, 2)
b = A(3, 4)
c = a + b